SAS-Makro-Programmierung: - Urz
SAS-Makro-Programmierung: - Urz SAS-Makro-Programmierung: - Urz
Fehlermeldung zu vermeiden, muß anstelle eines Wertes für var2 ein Komma angegeben werden.Durch das Komma überspringt der Makro-Prozessor diesen Wert, und erkennt die nachfolgendenVariablen richtig.Probieren Sie aus, was passiert, wenn sie bei Aufruf 2 das Komma weglassen.Übungsaufgaben5. Welcher SAS-Code wird mit folgendem Makro erzeugt:%macro meintitl;title "Heute ist &sysday, &sysdate";%mend meintitl;Wie lautet der Aufruf dieses Makros?6. Schreiben Sie ein Makro %sortier, das die Proc Sort aufruft. Übergeben Sie dieInformationen über den zu bearbeitenden Datensatz und die by-Variable überPositionsparameter.7. Fügen Sie in das Makro %Sortier folgende Ergänzungen ein:• die Prozedur Print zur Kontrolle und• eine Titel-Zeile mit dem aktuellen Datum.8. Schreiben Sie ein Makro %Plotte, das die Prozedur Gplot aufruft. Das Makro sollte 3Schlüsselparameter haben:• Name der zu verwendenden SAS-Datei,• Name der Variable, die auf der x-Achse aufgetragen wird und• Name der Variable, die auf der y-Achse aufgetragen wird,a. Ergänzen Sie das Makro um eine dritte Variable z, die als Gruppierungsvariable fungieren soll.(plot x*y=z).b. Bearbeiten Sie mit dem Makro den Beispieldatensatz IRIS, den sie im Verzeichnis'N:\SASURZ\DATEN' finden. Plotten sie PL gegen PW, mit der Variable BLUME alsGruppierungsvariable.c. Fügen Sie eine where-Anweisung für die Variable z ein, und übergeben Sie dieEinschränkungsbedingung als Positionsparameter.d. Fertigen Sie sich für jede der drei Blumenarten ein eigenes Schaubild an.9. Schreiben Sie ein Makro KREUZTAB, das die Prozedur FREQ aufruft. Das Makro sollte dreiParameter haben: Zwei Positionsparameter für die Variablen in den Zeilen und den Spalten undein Schlüsselparameter für den Namen des SAS-Datensatzes.Klassifizieren Sie die Variable SL so, daß vier etwa gleichgroße Gruppen entstehen. Dazumüssen sie sich ein Format definieren. Erzeugen Sie danach eine temporäre Datei IRIS, in der siedas Format zuweisen. Rufen Sie das Makro für die temporäre Datei IRIS auf und tragen Sie dieklassifizierte Variable SL gegen BLUME auf. (Tip: Quartil-Bildung mit PROC UNIVARIATE,Klassifizierung mit PROC FORMAT.)14
4. Lokale und globale MakrovariablenDas SAS-System unterscheidet zwischen• globalen und• lokalen Makrovariablen.Die globalen Makrovariablen gelten während der gesamten SAS-Sitzung und können an beliebigerStelle verwendet werden, sobald sie definiert wurden. Globale Variablen sind z.B. die unter Kap.2.1 beschriebenen automatischen Makrovariablen wie &sysdate oder &systime.Im Unterschied dazu gelten die lokalen Makrovariablen nur in der Umgebung, die während einesMakroaufrufs angelegt wird. Diese Variablen sind daher nur innerhalb des Makros oder innerhalbdarin verschachtelter Makros verfügbar.Die Werte der Makrovariablen werden in Symboltabellenabgelegt: die Werte der globalen Variablenin einer einzigen globalen Tabelle, die Werte der lokalen Variablen in jeweils eigenen lokalenSymboltabellen.4.1 Erzeugung von lokalen und globalen MakrovariablenMakrovariablen können auf verschiedene Weise erzeugt werden:• vom SAS-System (automatische Variablen, Kap.2.1),• mit der Symput-Routine (siehe Kap. 7.1.2),• durch die Parameter beim Makro-Aufruf (siehe Kap. 3.3),• mit der %input-Anweisung (siehe Kap. 5.3),• mit der %let-Anweisung (siehe Kap. 2.2),• mit der %global-Anweisung (siehe Kap. 4.1.1),• mit der %local-Anweisung (siehe Kap. 4.1.2).Die Stelle, an der die Variable erzeugt wird, entscheidet, ob die Variable global oder lokal ist:wie wo wasautomatisch beim SAS-Aufruf global (immer)%let-Anweisung außerhalb eines Makros global (aktuelle Sitzung)%let-Anweisung innerhalb eines Makros lokalMakro-Parameter Parameterliste beim Aufruf lokal%input-Anweisung innerhalb und außerhalb von global (aktuelle Sitzung)Makrossymput-Routine innerhalb und außerhalb von global (aktuelle Sitzung)Makros%global-Anweisung innerhalb und außerhalb von global (aktuelle Sitzung)Makros%local-Anweisung innerhalb eines Makros lokalBeispiel:%let name=WILHELM;%macro chameleo;%let name=HANS;%put &name;%mend chameleo;15
- Seite 1 und 2: Universitätsrechenzentrum Heidelbe
- Seite 3 und 4: 6.1.5 %UPCASE- UND %QUPCASE-FUNKTIO
- Seite 5 und 6: LegendeSAS-Schlüsselworte, -Anweis
- Seite 7 und 8: Makrovariablen unterscheiden sich g
- Seite 9 und 10: 2.2 Benutzerdefinierte Makrovariabl
- Seite 11 und 12: %let vname=hans;%let name=&vname Sc
- Seite 13: • definieren lokale Makrovariable
- Seite 17 und 18: Dies bedeutet, daß der Makro-Proze
- Seite 19 und 20: Makro-Programmanweisungen sind die
- Seite 21 und 22: %put &name;%mend vornach; Der Makro
- Seite 23 und 24: infile in2;input produkt kosten dat
- Seite 25 und 26: un;%kurz: proc print data=_last_(ob
- Seite 27 und 28: Fenstername benennt das Fenster und
- Seite 29 und 30: PROTECT=YES|NOFalls Sie PROTECT=YES
- Seite 31 und 32: Bild 2: Makro DISP zeigt beide Grup
- Seite 33 und 34: 6.1 Funktionen zur Bearbeitung von
- Seite 36 und 37: Beispiel 1: %macro Verglei;%put Geb
- Seite 38 und 39: Beispiele:%let wert=%eval(50+60);%p
- Seite 41 und 42: Aufruf:%end;%put Ergebnis: &wert1 &
- Seite 43 und 44: 7. Berührungspunkte zwischen Makro
- Seite 45 und 46: Die Ausprägung der Variable muß e
- Seite 47 und 48: 7.1.3 Resolve-FunktionDiese Funktio
- Seite 49 und 50: Syntax:call execute(argument);Das a
- Seite 51 und 52: 8.1 Named styled Makros"Named style
- Seite 53 und 54: SystemoptionErklärungmautosource/B
- Seite 55 und 56: 9.3 Allgemeine SystemoptionenSystem
- Seite 57 und 58: Lösungvorschläge zu den Übungsau
- Seite 59 und 60: Proc print data=&sds;run;%end;%* Fa
- Seite 61 und 62: %put Fügen sie die Fehlermeldung
- Seite 63 und 64: Welcher SAS-Code wird mit folgenden
Fehlermeldung zu vermeiden, muß anstelle eines Wertes für var2 ein Komma angegeben werden.Durch das Komma überspringt der <strong>Makro</strong>-Prozessor diesen Wert, und erkennt die nachfolgendenVariablen richtig.Probieren Sie aus, was passiert, wenn sie bei Aufruf 2 das Komma weglassen.Übungsaufgaben5. Welcher <strong>SAS</strong>-Code wird mit folgendem <strong>Makro</strong> erzeugt:%macro meintitl;title "Heute ist &sysday, &sysdate";%mend meintitl;Wie lautet der Aufruf dieses <strong>Makro</strong>s?6. Schreiben Sie ein <strong>Makro</strong> %sortier, das die Proc Sort aufruft. Übergeben Sie dieInformationen über den zu bearbeitenden Datensatz und die by-Variable überPositionsparameter.7. Fügen Sie in das <strong>Makro</strong> %Sortier folgende Ergänzungen ein:• die Prozedur Print zur Kontrolle und• eine Titel-Zeile mit dem aktuellen Datum.8. Schreiben Sie ein <strong>Makro</strong> %Plotte, das die Prozedur Gplot aufruft. Das <strong>Makro</strong> sollte 3Schlüsselparameter haben:• Name der zu verwendenden <strong>SAS</strong>-Datei,• Name der Variable, die auf der x-Achse aufgetragen wird und• Name der Variable, die auf der y-Achse aufgetragen wird,a. Ergänzen Sie das <strong>Makro</strong> um eine dritte Variable z, die als Gruppierungsvariable fungieren soll.(plot x*y=z).b. Bearbeiten Sie mit dem <strong>Makro</strong> den Beispieldatensatz IRIS, den sie im Verzeichnis'N:\<strong>SAS</strong>URZ\DATEN' finden. Plotten sie PL gegen PW, mit der Variable BLUME alsGruppierungsvariable.c. Fügen Sie eine where-Anweisung für die Variable z ein, und übergeben Sie dieEinschränkungsbedingung als Positionsparameter.d. Fertigen Sie sich für jede der drei Blumenarten ein eigenes Schaubild an.9. Schreiben Sie ein <strong>Makro</strong> KREUZTAB, das die Prozedur FREQ aufruft. Das <strong>Makro</strong> sollte dreiParameter haben: Zwei Positionsparameter für die Variablen in den Zeilen und den Spalten undein Schlüsselparameter für den Namen des <strong>SAS</strong>-Datensatzes.Klassifizieren Sie die Variable SL so, daß vier etwa gleichgroße Gruppen entstehen. Dazumüssen sie sich ein Format definieren. Erzeugen Sie danach eine temporäre Datei IRIS, in der siedas Format zuweisen. Rufen Sie das <strong>Makro</strong> für die temporäre Datei IRIS auf und tragen Sie dieklassifizierte Variable SL gegen BLUME auf. (Tip: Quartil-Bildung mit PROC UNIVARIATE,Klassifizierung mit PROC FORMAT.)14