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

Die argumente können• Zeichenketten sein,• Datenschritt-Zeichenkettenvariablen oder• Datenschritt-Zeichenkettenausdrückesein.Beispiele1. Beide Argumente sind ZeichenkettenBeispiel:data;call symput ('stadt', 'London');run;%put Stadt=&stadt;Ergebnis: Stadt=LondonDie Argumente müssen in Anführungszeichen eingeschlossen werden.2. Beide Argumente sind DatenschrittvariablenBeispiel:data loc;input gebiet $ name $;call symput(gebiet,name);cards;stadt Londonland Englandfluss Themse;%put Stadt=&stadt Land=&land Fluss=&fluss;Ergebnis: Stadt=London Land=England Fluss=ThemseDie Argumente dürfen nicht in Anführungszeichen eingeschlossen sein und der Wert des 1. Argumentsmuß ein gültiger Makrovariablenname sein.Es werden 3 Makrovariablen hergestellt (alle Ausprägungen der unter die Variablen gebiet).Durch die symput-Funktion bekommen sie die Werte London England Themse zugewiesen.3. Argument2 ist das Ergebnis einer Datenschritt-FunktionBeispiel:data;call symput('datum', put(today(),ddmmyy8.));run;%put datum=&datum;Ergebnis: datum=13/07/95In diesem Beispiel wird das argument1 durch eine Put-Funktion referenziert. Die Makrovariabledatum ist das Ergebnis der today-Funktion des Datenschritts (Die leere Klammer hinter dertoday-Funktion teilt SAS mit, daß es sich um eine Datenschrittfunktion handelt, und nicht um eineVariable). Mit Hilfe der %put-Anweisung wird dieser Wert raus-geschrieben.46

7.1.3 Resolve-FunktionDiese Funktion weist einer Datensatz-Variablen einen Wert zu. Die Länge, der mit Hilfe derresolve-Funktion hergestellten Variablen, beträgt standardmäßig 200 Zeichen, was sich beigrößeren Datenmengen auf die Rechengeschwindigkeit auswirken kann. Die resolve-Funktion isterst ab SAS-Version 6.07 verfügbar.Syntax:resolve(Argument)argument ist ein Makro-Ausdruck:• Textstring in Anführungszeichen (Die Anführungszeichen hindern den Makro-Prozessoran der Auflösung des Makroausdrucks während des Datenschritts.)name=resolve('%locate');• Name einer Datensatz-Variable (Der Inhalt der Datensatz-Variablen sollte ein Makro-Ausdruck sein.)adresse='%identi'Name=resolve(adresse)• Zeichenkette, die einen Makro-Ausdruck erzeugt.region=resolve('%land'||left(id))Wenn Sie den Wert einer Variable mit resolve bilden, hängt dieser von der Ausführung desDatenschritts ab. Wird der Wert als Makro-Variable gebildet, bleibt er während des Datenschrittskonstant. Im Unterschied zu symget erlaubt resolve zusätzliche Argumentformen und istflexibler einsetzbar, allerdings auch Ressourcen-intensiver.Beispiel:%let event=lousisiana purchase;%macro date;1803%mend date;%let person1=Thomas Jefferson;data _null_;length var1-var4 $20.;YEAR='%date';var1=resolve('&event');var2=resolve('%date');var3=resolve(year);var4=resolve('&person'||left(_n_));put var1--var4;run;Ergebnis: lousisiana purchase 1803 1803 Thomas Jefferson Die length-Anweisung definiert die Variablen var1-var4 mit einer Länge von 20 Zeichen.(Der Standard wäre 200 Zeichen.) Die Variablen var1 und var2 werden zu Zeichenketten aufgelöst. var1 erhält den Wertlouisiana purchase (Der Wert der Makrovariable event); var2 erhält durch die Auflösungdes Makros date den Wert 1803. var3 erhält den Wert der Datenschrittvariablen YEAR, der wiederum einen Makroaufrufbeinhaltet, und löst sich somit ebenfalls zu 1803 auf. var4 kombiniert die Zeichenkette &person und den Wert der automatischen Zählvariablen _N_,um die Makro-Variable &person1 zu referenzieren, und letztendlich zu Thomas Jeffersonaufzulösen. (Die left-Funktion schneidet die Leerzeichen ab die links von _N_ auftauchen.)47

7.1.3 Resolve-FunktionDiese Funktion weist einer Datensatz-Variablen einen Wert zu. Die Länge, der mit Hilfe derresolve-Funktion hergestellten Variablen, beträgt standardmäßig 200 Zeichen, was sich beigrößeren Datenmengen auf die Rechengeschwindigkeit auswirken kann. Die resolve-Funktion isterst ab <strong>SAS</strong>-Version 6.07 verfügbar.Syntax:resolve(Argument)argument ist ein <strong>Makro</strong>-Ausdruck:• Textstring in Anführungszeichen (Die Anführungszeichen hindern den <strong>Makro</strong>-Prozessoran der Auflösung des <strong>Makro</strong>ausdrucks während des Datenschritts.)name=resolve('%locate');• Name einer Datensatz-Variable (Der Inhalt der Datensatz-Variablen sollte ein <strong>Makro</strong>-Ausdruck sein.)adresse='%identi'Name=resolve(adresse)• Zeichenkette, die einen <strong>Makro</strong>-Ausdruck erzeugt.region=resolve('%land'||left(id))Wenn Sie den Wert einer Variable mit resolve bilden, hängt dieser von der Ausführung desDatenschritts ab. Wird der Wert als <strong>Makro</strong>-Variable gebildet, bleibt er während des Datenschrittskonstant. Im Unterschied zu symget erlaubt resolve zusätzliche Argumentformen und istflexibler einsetzbar, allerdings auch Ressourcen-intensiver.Beispiel:%let event=lousisiana purchase;%macro date;1803%mend date;%let person1=Thomas Jefferson;data _null_;length var1-var4 $20.;YEAR='%date';var1=resolve('&event');var2=resolve('%date');var3=resolve(year);var4=resolve('&person'||left(_n_));put var1--var4;run;Ergebnis: lousisiana purchase 1803 1803 Thomas Jefferson Die length-Anweisung definiert die Variablen var1-var4 mit einer Länge von 20 Zeichen.(Der Standard wäre 200 Zeichen.) Die Variablen var1 und var2 werden zu Zeichenketten aufgelöst. var1 erhält den Wertlouisiana purchase (Der Wert der <strong>Makro</strong>variable event); var2 erhält durch die Auflösungdes <strong>Makro</strong>s date den Wert 1803. var3 erhält den Wert der Datenschrittvariablen YEAR, der wiederum einen <strong>Makro</strong>aufrufbeinhaltet, und löst sich somit ebenfalls zu 1803 auf. var4 kombiniert die Zeichenkette &person und den Wert der automatischen Zählvariablen _N_,um die <strong>Makro</strong>-Variable &person1 zu referenzieren, und letztendlich zu Thomas Jeffersonaufzulösen. (Die left-Funktion schneidet die Leerzeichen ab die links von _N_ auftauchen.)47

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!