Was wissen Sie über Makroprogrammierung in SAS?

Webinar@Lunchtime Was wissen Sie über Makroprogrammierung in SAS? Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d. Herzlich Willkommen b...
Author: Ferdinand Bauer
1 downloads 1 Views 2MB Size
Webinar@Lunchtime Was wissen Sie über Makroprogrammierung in SAS?

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Herzlich Willkommen bei Webinar@Lunchtime Moderation

Training

Anne K. Bogner-Hamleh

Karin Gross

SAS Institute GmbH Education Consultant

SAS Institute GmbH Manager SAS Education Services

Xing-Profil:

Xing-Profil:

http://www.xing.com/profile/AnneKatrin_BognerHamleh?key=0.0

http://www.xing.com/profile/Karin_Gross2

Hinweise zum Ablauf des Webinars: • Teilnehmer sind automatisch “stumm” geschaltet • Sie können Nachrichten an den Moderator senden und Fragen stellen

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Webinar@Lunchtime

Agenda • Makrofunktionalität • Hauptelemente der Makrosprachee • Makrotrigger • Makrovariablen erstellen / speichern / ausgeben • Definition von Makroprogrammen • Makroparameter • Iteration / Selektion • Systemoptionen im Makroumfeld • Mehrfache &&&&&&&& • IN-Operator in Makros Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Frage 1 Was ist die generelle Zielsetzung der Makrofunktionalität? a. b. c. d. e.

Erstellen von Daten Datenmanagement Mathematische Berechnungen Ausführen von Prozeduren Textersetzung

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

SAS Makrofunktionalität • • •

Textersetzung für wiederkehrende Aufgaben dynamisieren Programme

Zwei Komponenten: Makroprozessor verarbeitet alle Makrobefehle

Makrosprache Syntax für den Makroprozessor

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Frage 2 Welches sind die beiden Hauptelemente in der Makrosprache? a. b. c. d. e.

Makrodateien Makroprozeduren Makroprogramme Makrostyles Makrovariablen

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Makroelemente Makrovariablen und Makroprogramme Makrovariablen

für einfache und kurze Textersetzungen

Makroprogramme

für längere und komplexere Textersetzungen unter Verwendung von Makrovariablen und Makroanweisungen

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Frage 3 Welche beiden Zeichen sind sogenannte Makrotrigger? a. b. c. d. e.

# $ % & Leerzeichen

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Makrotrigger & gefolgt vom einem Namen  Makrovariablen-Referenz &dsn

&state

&month

% gefolgt von einem Namen  Referenz auf Makroprogramm, Makroanweisung oder Makrofunktion %dsn

%state %do year = 2010 %to 2017; %substr(&date,6,4) Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

%month

Makrotrigger in Anführungszeichen Doppelte Anführungszeichen  Makrotrigger werden aufgelöst Einfaches Hochkomma  Makrotrigger werden nicht aufgelöst APR

2017

where month="&mnth" and year=&yr;

title 'Employees in R&D';

keine Ersetzung Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Frage 4 Mit welchen drei Methoden können Makrovariablen befüllt werden? a. b. c. d. e.

%INCLUDE-Anweisung %LET-Anweisung CALL SYMPUTX im Data Step CRMACRO-Funktion im Data Step INTO in PROC SQL

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Makrovariablen erstellen •

%LET-Anweisung %LET makrovariable = wert;



CALL SYMPUTX-Routine im Data Step

CALL SYMPUTX(makrovariable , wert); •

INTO-Klausel in PROC SQL SELECT wert INTO : makrovariable

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

%LET-Anweisung • •

gültig im “Open Code” oder Makroprogramm erstellt Makrovariable und weist einen Wert zu. %let YearCurr=2017; %let YearPrev=2016;

• •

Makrofunktionen werden vom Makroprozessor ausgeführt Makrotrigger werden vor Zuweisung aufgelöst %let YearCurr=%sysfunc(year(%sysfunc(today()))); %let YearPrev=%eval(&YearNow-1);

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

CALL SYMPUTX-Routine im Data Step •

Weist einen Wert aus dem Data Step einer Makrovariablen zu data _null_; YC=year(today()); YP=YC-1; call symputx('YearCurr',YC); call symputx('YearPrev',YP); run;

Hinweis: CALL SYMPUTX entfernt führende und nachfolgende Leerzeichen, früher: CALL SYMPUT (TRIM (LEFT(…)) Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

CALL SYMPUTX-Routine im Data Step • •

hilfreich bei der Erzeugung von ganzen Makrovariablengruppen hier: in jedem Durchlauf des Data Steps eine eigene Makrovariable mit Präfix student erzeugen, in der letzten Iteration count mit der Anzahl erzeugen data _null_; set sashelp.class end=last; call symputx(cat('student',_N_),name); if last then call symputx('count',_N_); run;

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

INTO-Klausel in PROC SQL •

weist einen Wert aus der SELECT-Klausel einer Makrovariablen zu proc sql; select put(max(year),4.) into :YearMax from work.prdsale; quit;

Hinweis: Führende und nachfolgende Leerzeichen werden beibehalten!

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

INTO-Klausel in PROC SQL •

Zwei Makrovariablen: YearMax enthält Maximum, YearMin enthält Minimum der Jahreswerte select put(max(year),4.), put(min(year),4.) into :YearMax, :YearMin from work.prdsale;

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

INTO-Klausel in PROC SQL •

alle eindeutigen Werte von make durch Trenner getrennt in die Makrovariable CarMakes schreiben select distinct make into :CarMakes separated by ' ' from sashelp.cars;



Gruppe von 38 Makrovariablen mit dem Präfix Make erstellen select distinct make into :Make1-:Make38 from sashelp.cars;

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

INTO-Klausel in PROC SQL •

Gruppe von Makrovariablen mit dem Präfix Make erstellen



SQL bestimmt die Anzahl der Makrovariablen abhängig von der Datengrundlage select distinct make into :Make1from sashelp.cars;



SQLOBS  automatische Makrovariable bei Verwendung von PROC SQL



enthält die Anzahl Zeilen, die durch die SELECT-Klausel erzeugt werden



hier: SQLOBS = 38 Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Frage 5 Wo werden Makrovariablen gespeichert? a. b. c. d. e.

In lokalen und globalen Symboltabellen In Makrodateien In Rohdatendateien In SAS Katalogen In Symbolgentabellen

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Speicherung von Makrovariablen • •

Makrovariable erstellt  Makroprozessor fügt sie zur Symboltabelle hinzu Arten von Symboltabellen: global und lokal Symbol Table

sysdate9 state month year dsn

15MAR2017 Florida APR 2017 sashelp.class

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

memory

Globale und lokale Symboltabellen Globale Symboltabelle



Lokale Symboltabelle



• •

• •

wird bei SAS Start angelegt besteht für die Dauer der SAS Sitzung enthält automatische Makrovariablen, Makrovariablen, die außerhalb von Makroprogrammen definiert wurden und Makrovariablen, die innerhalb von Makroprogrammen als global definiert wurden wird bei Start eines Makroprogramms angelegt besteht nur für die Ausführungsdauer eines Makroprogramms enthält Makrovariablen, die innerhalb eines Makroprogramms lokal angelegt wurden Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Frage 6 Mit welcher Anweisung kann man sich den Wert einer Makrovariablen ins Log schreiben lassen? a. b. c. d. e.

%GLOBAL-Anweisung %LOG-Anweisung %MACRO-Anweisung %PUT-Anweisung %VALUE-Anweisung

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

%PUT-Anweisung •

Schreibt Makrovariablen und ihre Werte ins LOG. %put _all_;

Hinweis:

14 %put _all_; GLOBAL CITY17 Orlando GLOBAL DSN sashelp.class GLOBAL MONTH APR GLOBAL STATE Florida GLOBAL YEAR 2017 ... AUTOMATIC SYSDATE 15MAR17 AUTOMATIC SYSDATE9 15MAR2017 ...

_ALL_  Liste aller Makrovariablen (benutzerdefinierte und automatische)

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

%PUT-Anweisung %put &month &year;

18 %put &month &year; Jul 2017

19 %put &=month &=akt_jahr; MONTH=Jul AKT_JAHR=2017

%put &=month &=akt_jahr;

%put Today is &sysdate;

20 %put Today is &sysdate; Today is 21Jul17

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Frage 7 Mit welchen Anweisungen wird die Definition von Makroprogrammen eingeleitet und beendet? a. b. c. d. e.

%DO- und %END-Anweisung %INPUT- und %PUT-Anweisung %MACRO- und %MEND-Anweisung %MBEGIN- und %MSTOP-Anweisung %START- und %END-Anweisung

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Makroprogramme • •

Beginnen mit %macro Enden mit %mend %macro mydttime;

Name des Makroprogramms

%let mydt=%sysfunc(date(),worddate.); %let mytime=%sysfunc(time(),timeampm.); %put The current date is &mydt..; %put The current time is &mytime..; %mend mydttime;

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Makroprogramme •

Aufruf: %-Zeichen gefolgt vom Namen des Makroprogramms %mydttime

Hinweis: Ein Makroaufruf ist keine Anweisung, deshalb kein Semikolon an das Ende! 2926 %mydttime The current date is July 21, 2017. The current time is 12:32:09 PM.

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Frage 8 Welche beiden Methoden gibt es bei der Angabe von Parametern in Makroprogrammen? a. b. c. d. e.

Dateiparameter Schlüsselwortparameter Positionsparameter Geordnete Parameterliste Nullparameter

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Parameter in Makroprogrammen Makrodefinition: einen oder mehrere Parameter (lokale Variablen) • Wert wird beim Aufruf übergeben Positionsparameter: •

%macro cars(mke, cyl);

Schlüsselwortparameter: %macro cars(mke=Audi, cyl=6);

Hinweis: • Anzahl der Parameter ist beliebig • Parameter werden durch Komma getrennt Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Positionsparameter • •

Makrodefinition: Reihenfolge beliebig Makroaufruf: Reihenfolge muss mit Definition übereinstimmen %macro cars(mke, cyl); proc print data=sashelp.cars; where make="&mke" and cylinders=&cyl; title "&mke &cyl Cylinders"; run; %mend cars;

%cars(Ford,8)

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Schlüsselwortparameter Makrodefinition: Standardwerte können mit parametername= definiert werden Makroaufruf: Reihenfolge beliebig, parametername= muss für ein Überschreiben des Standardwertes angegeben werden. %macro cars(mke=Audi, cyl=6); proc print data=sashelp.cars; where make="&mke" and cylinders=&cyl; title "&mke &cyl Cylinders"; run; %mend cars; %cars(cyl=4)

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Frage 9 Welche beiden Anweisungsgruppen sind in Makroprogrammen gültig? a. b. c. d. e.

%ARRAY- und %DO-Anweisungen %DO- und %END-Anweisungen %DROP- und %KEEP-Anweisungen %IF- und %WHERE-Anweisungen %IF - %THEN - und %ELSE-Anweisungen

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Wiederholte und bedingte Verarbeitung Wichtig: nur in Makroprogrammen gültig! •

Schleife: %DO makrovariable = start %TO stop; %END;



Verzweigung: %IF bedingung %THEN tu_was; < %ELSE %IF bedingung %THEN tu_was_anderes; > < %ELSE tu_was_ganz_anderes; >

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Wiederholte Verarbeitung •

Block wird abhängig von der Indexvariablen wiederholt generiert %macro allcars; %do i = 1 %to 38; proc print data=sashelp.cars noobs; where make="%scan(&makes,&i,~)"; title "Make %scan(&makes,&i,~)"; run; %end; %mend allcars; %allcars

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

continued...

Bedingte Verarbeitung •

Block wird abhängig von der Bedingung einmal generiert %macro carmake(mke); %if &mke=Chevrolet or &mke=Toyota %then %do; proc freq data=sashelp.cars; where make="&mke"; tables cylinders; title "Make &mke"; run; %end;

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Bedingte Verarbeitung %else %do; proc print data=sashelp.cars; where make="&mke"; title "Make &mke"; run; %end; %mend carmake; %carmake(Chevrolet) %carmake(Toyota) %carmake(Acura)

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Frage 10 Welche Systemoptionen sind hilfreich bei der Fehlersuche in Makroprogrammen? a. b. c. d. e.

MLOGIC MPRINT MTEST SYMBOLGEN SYSPARM

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Systemoptionen im Makroumfeld Was erscheint im LOG? MLOGIC

Ausführungshinweise von Makroprogrammen

MPRINT

Von Makroprogrammen generierter Code

SYMBOLGEN

Auflösung von Makrovariablen

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Systemoptionen im Makroumfeld options mlogic mprint symbolgen; %carmake(Chevrolet) MLOGIC(CARMAKE): MLOGIC(CARMAKE): SYMBOLGEN: Macro SYMBOLGEN: Macro MLOGIC(CARMAKE): MPRINT(CARMAKE): SYMBOLGEN: Macro MPRINT(CARMAKE): MPRINT(CARMAKE): SYMBOLGEN: Macro MPRINT(CARMAKE): MPRINT(CARMAKE):

Beginning execution. Parameter MKE has value Chevrolet variable MKE resolves to Chevrolet variable MKE resolves to Chevrolet %IF condition &mke=Chevrolet or &mke=Toyota is TRUE proc freq data=sashelp.cars; variable MKE resolves to Chevrolet where make="Chevrolet"; tables cylinders; variable MKE resolves to Chevrolet title "Make Chevrolet"; run;

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Frage 11 Wie wird der Inhalt der Makrovariablen name korrekt referenziert? a. b. c. d.

%name. %name% &name. &name&

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Punkt als Begrenzer für Makrovariablennamen •

Häufig: Referenzierung mit & vor dem Namen &city

• •

&county

&state

Möglich: Referenzierung mit & vor dem Namen und . nach dem Namen. Bedeutung: . beendet den Namen der Makrovariablen

&city.

&county.

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

&state.

Punkt als Begrenzer für Makrovariablennamen •

Hilfreich: bei nachfolgendem konstanten Text

%let month=Jul; %let akt_jahr=2017; %put &month&akt_jahr;

Jul2017

%put &month&akt_jahrdata;

WARNING: Apparent symbolic reference not resolved.

%put &month&akt_jahr.data;

Jul2017data

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Punkt als Begrenzer für Makrovariablennamen •

Konstanter Text soll mit . beginnen? Nimm 2 ..

%let lib=sashelp; %let dsn=class; proc print data=&lib.&dsn; run;

ERROR: File WORK.SASHELPCLASS does not exist.

proc print data=&lib..&dsn; run;

sashelp.class

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Frage 12 Wie häufig scannt SAS den Ausdruck &&city&year? a. b. c. d.

0 1 2 3

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Mehrere &&&&&& • •

Normal: Auflösung von Makrovariablen von links nach rechts Mehrere &: Ändert die Auflösungsreihenfolge %let %let %let %let

year=17; var=state; city17=Orlando; state17=Florida;

1 2 %put &city&year; 2 1 %put &&city&year;

WARNING: Apparent symbolic reference not resolved.

Orlando Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Mehrere &&&&&& Makroprozessor geht mehrmals über diee Makrovariablenreferenz •

aus && wird &



was aufgelöst werden kann wird aufgelöst



was nicht aufzulösen geht wird übernommen



wiederholen bis alles aufgelöst ist %let %let %let %let

year=17; var=state; city17=Orlando; state17=Florida;

%put &&&var&year;

? Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Mehrere &&&&&& Makroprozessor geht mehrmals über diee Makrovariablenreferenz •

aus && wird &



was aufgelöst werden kann wird aufgelöst



was nicht aufzulösen geht wird übernommen



wiederholen bis alles aufgelöst ist %let %let %let %let

year=17; var=state; city17=Orlando; state17=Florida;

%put &&&var&year;

Florida Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Frage 13 Mit welcher Option beachtet der Makroprozessor den IN-Operator? a. b. c. d. e.

INOP=YES INOPERATOR MAC_IN_OP MACRO_IN=TRUE MINOPERATOR

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Option MINOPERATOR •

Makroprozessor sieht in als gültigen Operator %macro carsubset(type) / minoperator; %if &type in SUV Truck Wagon %then %do; ... %if &type in (Sedan Sports) %then %do; ...



Klammern sind optional in kann durch # ersetzt werden



Elemente durch Leerzeichen trennen



Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Option MINDELIMITER •

Gibt den Trennen zwischen den Elementen an. %macro carsubset(type) / minoperator mindelimiter=','; %if &type in SUV,Truck,Wagon %then %do; ... %if &type in (Sedan,Sports) %then %do; ...

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Sie möchten mehr erfahren? Besuchen Sie unsere Kurse oder lesen Sie sich schlau. SAS Education Kurse: •

SAS® Makrosprache 1: Grundlagen



SAS® Makrosprache 2: Praxis für Fortgeschrittene



Strategien für die Entwicklung von Makro-basierten Anwendungen

Buchempfehlung •

Carpenter’s Complete Guide to the SAS® Macro Language, Third Edition



SAS® Macro Programming Made Easy, Third Edition Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Webinar@Lunchtime Zusammenfassung %macro arbeitsam; %do i = 1 %to 100; %put Ich soll jeden Tag mit Makros arbeiten.; %end; %mend; %arbeitsam LOG: Ich soll jeden Tag mit Makros arbeiten. Ich soll jeden Tag mit Makros arbeiten.

Ich soll jeden Tag mit Makros arbeiten. Ich soll jeden Tag mit Makros arbeiten. Ich soll jeden Tag mit Makros arbeiten. ... Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Vielen Dank für Ihre Teilnahme!

Bring-a-Friend Sommeraktion Kommen Sie im Juli oder August zu zweit zum Kurs und sparen Sie 50%

SAS® Enterprise Guide Praxistage – 16./17. Oktober 2017 in Heidelberg Lernen Sie in 1,5 Tagen die Vielseitigkeit des SAS® Enterprise Guide kennen. Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Nächstes Webinar@Lunchtime: August: Sommerpause  28. September 2017: SAS Enterprise Guide Praxistage – wer, wann, was Karin Gross

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Folien zum Download unter www.sas.de/lunchtime WIE HAT IHNEN UNSER WEBINAR GEFALLEN?

sas.com

Copy rig ht © SA S Institute Inc. A ll rig hts re se rve d.

Suggest Documents