SAS-Makro-Programmierung: - Urz
SAS-Makro-Programmierung: - Urz SAS-Makro-Programmierung: - Urz
%chameleo%put &name;Überprüfen Sie am Computer, was passiert. Mit dieser %let-Anweisung wird die Makrovariable name global definiert.Falls Sie die erste %let-Anweisung weglassen, ist die Makrovariable name nur lokal definiert unddie Variable wird nicht richtig aufgelöst, wenn Sie sie außerhalb des Makros verwenden wollen.Sie erhalten folgende Mitteilung:WARNING: Apparent symbolic reference NAME not resolved. Ist die Variable global definiert, so trägt sie den Wert, den sie zuletzt zugewiesen bekommen hat.In diesem Beispiel nimmt die Variable name zuerst den Wert WILHELM und dann HANS an.4.1.1 Die %Global-AnweisungDie %global-Anweisung erzeugt globale Makrovariablen, d.h. Variablen, die sowohl innerhalb alsauch außerhalb von Makros benutzt werden können. Mit der %global-Anweisung bilden siezunächst lediglich eine Variable, weisen ihr aber im Unterschied zur %let-Anweisung noch keinenWert zu. Sie vereinbaren damit den Status der Makrovariablen, in diesem Fall global.Syntax:Beispiel:%global Makrovariablenname;%global Gfirst;Sie haben nun eine globale Makrovariable Gfirst angelegt, die aber bislang keinen Wert hat. Denweisen Sie ihr mit der %LET-Anweisung zu.Da Sie global vereinbarte Makrovariablen sowohl innerhalb als auch außerhalb eines Makrosverwenden können, ist es möglich z.B. mittels globaler Makrovariablen Informationen eines Makrosin ein anderes Makro zu transportieren.Beispiel:Aufruf:%let sds=co.blutbild;%macro compute;%global monat;%let monat=juli;proc means data=&sds;Title "report für &month";run;%mend compute;%macro write;proc print data=&sds;Title "report für &monat";run;%mend write;%compute%writeSubmittieren Sie dieses Programm zuerst ohne und dann mit der %global-Anweisung , undachten Sie auf die Überschrift (title) im Output-Fenster. Wenn Sie die %global-Anweisungweglassen, erscheint im Log-Fenster für das Makro write folgende Mitteilung:WARNING: Apparent symbolic reference MONAT not resolved.16
Dies bedeutet, daß der Makro-Prozessor die Makrovariable monat nicht auflösen kann, da diese nurlokal für das Makro compute vereinbart wurde. Fügen Sie jetzt die %global-Anweisung wiederhinzu, ist die Variable monat global vereinbart und kann überall verwendet werden.Ausnahme: Globale Makrovariablen können nicht innerhalb eines Makros verwendet werden,wenn die Makrovariablen dort bereits lokal verwendet werden.Die %global-Anweisung hat keine Auswirkung, wenn die Variable bereits global definiert wurde,z.B. mit einer %Let-Anweisung außerhalb eines Makros.4.1.2 Die %Local-AnweisungSyntax: %local Makrovariablenname;Beispiel:%local nummer;Die %local-Anweisung benennt Variablen, die nur innerhalb des aktuellen Makros Gültigkeithaben. Dies ist nur dann notwendig, wenn die Variable bereits außerhalb existiert. Dies kann z.B.zum Schutz von Indexvariablen sein, die nicht überschrieben werden sollen. Die %local-Anweisung kann nur innerhalb von Makros verwendet werden. Variablen, die mit einer %local-Anweisung definiert wurden, besitzen den Wert 0, solange ihnen kein anderer Wert mittels einer%let-Anweisung zugewiesen wurde. Dieser Wert gilt aber nur innerhalb des Makros.Variablen mit gleichem Namen, die bereits in der Umgebung definiert wurden, behalten ihren zuvorvereinbarten Wert.4.2 Makros innerhalb von MakrosWird in einem Makro ein anderes Makro aufgerufen, spricht man von verschachtelten (odergenesteten) Makros. Die globale äußere Umgebung wird als Niveau 0 bezeichnet. Je tiefer dieVerschachtelung fortschreitet, desto höher wird das Niveau gezählt.Eine Makrovariable ist innerhalb der Umgebung, in der sie definiert wurde und in jeder höherenUmgebung referenzierbar (also in den verschachtelten Makros).Beispiel: %macro drei;proc means data=&sds;NIVEAU 3 var &xvar &yvar;run;%mend drei;%macro zwei;proc gplot data=&SDS;NIVEAU 2 plot &yvar*&xvar;run;%drei%mend zwei;%macro eins(SDS,yvar,xvar);proc print data=&SDS;NIVEAU 1 var &yvar &xvar;run;%zwei%mend eins;Aufruf: %eins(co.blutbild,alter,albumin)17
- 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 und 14: • definieren lokale Makrovariable
- Seite 15: 4. Lokale und globale Makrovariable
- 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
- Seite 65 und 66: 11. Schreiben Sie ein Makro PLOTTER
Dies bedeutet, daß der <strong>Makro</strong>-Prozessor die <strong>Makro</strong>variable monat nicht auflösen kann, da diese nurlokal für das <strong>Makro</strong> compute vereinbart wurde. Fügen Sie jetzt die %global-Anweisung wiederhinzu, ist die Variable monat global vereinbart und kann überall verwendet werden.Ausnahme: Globale <strong>Makro</strong>variablen können nicht innerhalb eines <strong>Makro</strong>s verwendet werden,wenn die <strong>Makro</strong>variablen dort bereits lokal verwendet werden.Die %global-Anweisung hat keine Auswirkung, wenn die Variable bereits global definiert wurde,z.B. mit einer %Let-Anweisung außerhalb eines <strong>Makro</strong>s.4.1.2 Die %Local-AnweisungSyntax: %local <strong>Makro</strong>variablenname;Beispiel:%local nummer;Die %local-Anweisung benennt Variablen, die nur innerhalb des aktuellen <strong>Makro</strong>s Gültigkeithaben. Dies ist nur dann notwendig, wenn die Variable bereits außerhalb existiert. Dies kann z.B.zum Schutz von Indexvariablen sein, die nicht überschrieben werden sollen. Die %local-Anweisung kann nur innerhalb von <strong>Makro</strong>s verwendet werden. Variablen, die mit einer %local-Anweisung definiert wurden, besitzen den Wert 0, solange ihnen kein anderer Wert mittels einer%let-Anweisung zugewiesen wurde. Dieser Wert gilt aber nur innerhalb des <strong>Makro</strong>s.Variablen mit gleichem Namen, die bereits in der Umgebung definiert wurden, behalten ihren zuvorvereinbarten Wert.4.2 <strong>Makro</strong>s innerhalb von <strong>Makro</strong>sWird in einem <strong>Makro</strong> ein anderes <strong>Makro</strong> aufgerufen, spricht man von verschachtelten (odergenesteten) <strong>Makro</strong>s. Die globale äußere Umgebung wird als Niveau 0 bezeichnet. Je tiefer dieVerschachtelung fortschreitet, desto höher wird das Niveau gezählt.Eine <strong>Makro</strong>variable ist innerhalb der Umgebung, in der sie definiert wurde und in jeder höherenUmgebung referenzierbar (also in den verschachtelten <strong>Makro</strong>s).Beispiel: %macro drei;proc means data=&sds;NIVEAU 3 var &xvar &yvar;run;%mend drei;%macro zwei;proc gplot data=&SDS;NIVEAU 2 plot &yvar*&xvar;run;%drei%mend zwei;%macro eins(SDS,yvar,xvar);proc print data=&SDS;NIVEAU 1 var &yvar &xvar;run;%zwei%mend eins;Aufruf: %eins(co.blutbild,alter,albumin)17