SAS-Makro-Programmierung: - Urz

SAS-Makro-Programmierung: - Urz SAS-Makro-Programmierung: - Urz

web.urz.uni.heidelberg.de
von web.urz.uni.heidelberg.de Mehr von diesem Publisher
12.07.2015 Aufrufe

%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

%chameleo%put &name;Überprüfen Sie am Computer, was passiert. Mit dieser %let-Anweisung wird die <strong>Makro</strong>variable name global definiert.Falls Sie die erste %let-Anweisung weglassen, ist die <strong>Makro</strong>variable name nur lokal definiert unddie Variable wird nicht richtig aufgelöst, wenn Sie sie außerhalb des <strong>Makro</strong>s 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 <strong>Makro</strong>variablen, d.h. Variablen, die sowohl innerhalb alsauch außerhalb von <strong>Makro</strong>s 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 <strong>Makro</strong>variablen, in diesem Fall global.Syntax:Beispiel:%global <strong>Makro</strong>variablenname;%global Gfirst;Sie haben nun eine globale <strong>Makro</strong>variable Gfirst angelegt, die aber bislang keinen Wert hat. Denweisen Sie ihr mit der %LET-Anweisung zu.Da Sie global vereinbarte <strong>Makro</strong>variablen sowohl innerhalb als auch außerhalb eines <strong>Makro</strong>sverwenden können, ist es möglich z.B. mittels globaler <strong>Makro</strong>variablen Informationen eines <strong>Makro</strong>sin ein anderes <strong>Makro</strong> 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 <strong>Makro</strong> write folgende Mitteilung:WARNING: Apparent symbolic reference MONAT not resolved.16

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!