SAS-Makrovariablen

Aus SAS-Wiki
Wechseln zu: Navigation, Suche

Syntax

Syntax &Variablenname
Länge 1-32 Zeichen, der Variablenname muss mit einem Buchstaben oder einem Unterstrich beginnen, gefolgt von Buchstaben, Zahlen oder Unterstrichen. Es können sowohl Groß- als auch Kleinbuchstaben verwendet werden.
Beispiel
&SYSDATE  
&sds  
&hansi

SAS-Makrovariablen sind gekennzeichnet durch ein Ampersand (&) gefolgt von mindestens einem nichtleeren Zeichen. Es gibt:

  • automatische Makrovariablen (die direkt vom SAS System zur Verfügung gestellt werden) und
  • benutzerdefinierte Makrovariablen.

Der Makro-Prozessor setzt an die Stelle des Variablennamens den entsprechenden Wert ein (Textstring). Dieser Textstring kann maximal 65534 Zeichen lang sein.

Automatische Makrovariablen

Automatische Makrovariablen werden automatisch vom SAS-System mit dem Systemstart zur Verfügung gestellt. Sie beginnen alle mit den Buchstaben SYS. Da diese Kombination für das SAS-System reserviert ist, sollten Sie deshalb nie diese Kombination am Anfang eines Variablennamens benutzen. Dies gilt auch für die Buchstabenfolge AF, DMS und SQL. Zu beachten ist noch, dass einige automatische Makrovariablen schreibgeschützt sind, andere hingegen können auch überschrieben werden.

%Let SYSLAST = sashelp.cars;

Die wichtigsten automatischen Makrovariablen und ihre Funktion:

SYSDATE nur lesen Aktuelles Datum des Programmstarts
SYSDAY nur lesen Wochentag des Programmstarts
SYSTIME nur lesen Zeit des Programmstarts
SYSENV nur lesen Ausführungsmodus, Fore=interaktiv, Back=Batchjob
SYSSCP nur lesen Betriebssystem (als Abkürzung)
SYSHOSTNAME nur lesen Name des aktuellen Computers
SYSUSERID nur lesen User-ID bzw. Login
SYSVER nur lesen SAS-Version
SYSDEVIC lesen und schreiben aktueller Grafik Device Driver
SYSSCPL nur lesen ausführlichere Infos zum Betriebssystem
SYSMACRONAME nur lesen Name des aktuell ausgeführten Makros
SYSERR nur lesen Fehlerinformation (Return Code) von Prozeduren
SYSINFO nur lesen ähnlich wie SYSERR
SYSFILRC lesen und schreiben Return Code der letzten Filename-Anweisung
SYSLIBRC lesen und schreiben Return Code der letzten Libname-Anweisung
SYSRC lesen und schreiben Return Code des letzten Betriebssystem-Kommandos
SYSLAST lesen und schreiben Name der zuletzt erzeugten SAS-Datei: libref.dateiname (ein Name)
SYSDSN lesen und schreiben Name der zuletzt erzeugten SAS-Datei: libref dateiname (zwei Namen)

Verwendet werden können diese Variablen u.a. in Textzeilen, die mit

  • Title-Anweisungen,
  • Footnote-Anweisungen,
  • Note-Anweisungen und
  • Put-Anweisungen

erzeugt werden. Falls Sie, wie z.B. im nächsten Beispiel, Title- und Footnote-Anweisungen benutzen, müssen Sie doppelte Anführungszeichen (Gänsefüßchen) verwenden, da ansonsten die automatischen Makrovariablen nicht aufgelöst werden.

Beispiel
Proc Gslide;
  Title "Heute ist &SYSDAY, der &SYSDATE,&SYSTIME Uhr";
  Footnote "SAS-Version &SYSVER";
Run;

Anmerkung: Die automatischen Makrovariablen geben ihre Information in englischer Sprache aus. Alle automatischen Makrovariablen finden Sie im "SAS Macro Language Reference" beschrieben.

Benutzerdefinierte Makrovariablen

Sie können eigene Makrovariablen auf verschiedene Weise definieren. Die einfachste und gebräuchlichste Art ist die Verwendung von "%Let". Weitere Möglichkeiten der Erzeugung benutzerdefinierter Makrovariablen finden Sie im Kapitel Lokale und globale Makrovariablen.

Erzeugung von benutzerdefinierten Makrovariablen

Syntax
%let makrovariable=wert;
Beispiele
%Let A=13;
%Let Name=Alois Vorderhuf;
%Let Monat=November;

Die Variable makrovariable wird erzeugt, falls diese nicht bereits existiert, und sie bekommt den Wert wert zugewiesen. Falls Sie der gleichen Variablen nacheinander mehrere Werte zuweisen, wird der Wert überschrieben. Als Wert können Sie beliebige Zeichenketten zuweisen. Es empfiehlt sich, Namen von Makrovariablen so zu wählen, dass man auf den Inhalt der Makrovariablen schließen kann. So ermöglicht der Variablenname A im obigen Beispiel keine Rückschlüsse auf den Inhalt. Ganz anders geben die Makrovariablen Name bzw. Monat einen sehr deutlichen Hinweis auf den jeweiligen Inhalt.

Es ist auch möglich, Makrovariablen den Inhalt bereits bestehender Makrovariablen zuzuweisen.

Beispiel
%Let Datum=&SYSDATE;

Die Zuweisung erfordert keine Anführungszeichen. Werden diese trotzdem verwendet, werden sie als Teil des Wertes interpretiert. Die %Let-Anweisung entfernt führende und nachfolgende Leerzeichen des zugewiesenen Textes. Wollen Sie nachfolgende Leerzeichen berücksichtigen oder ein Semikolon als Textzeichen verwenden, müssen Sie die %Str-Funktion verwenden (siehe Makro-Funktionen).

Beispiel
%Let name=%Str( Herr Hans Ulrich Meier);
%Let druck=%Str(Proc Print; Run;);

Falls Sie dagegen nur %Let druck=Proc Print; Run; schreiben, hat ihre Variable druck nur den Wert "Proc Print", da die %Let-Anweisung nur bis zum Semikolon liest.

Mit %put _all_; werden sämtliche aktuellen Makrovariablen ins Logfenster ausgegeben, mit %put _user_ lediglich die benutzerdefinierten Makrovariablen.

Ausgabe des Wertes benutzerdefinierter Makrovariablen

Wenn Sie sich den Wert ihrer Makrovariablen anzeigen lassen wollen, verwenden Sie am einfachsten die "%Put-Anweisung". Sie schreibt den Wert ihrer Makrovariablen ins LOG-Fenster. (Analog zur Put-Anweisung für die Ausgabe von normalen Variablen.)

Beispiel
%Put &name;

Ausführlich beschrieben wird die %Put-Anweisung in Kapitel Makro-Programmanweisungen.

Verkettung von Makrovariablen

Sie können Text direkt an einen Makronamen anhängen. Damit lässt sich z.B. eine Variablenliste für die Keep-Anweisung erzeugen:

Beispiel Ergebnis
%Let start=1;
%Let ende=10;
Keep Var&start-Var&ende;
Keep Var1-Var10

Wollen Sie Makrovariablen voranstellen, müssen Sie dies folgendermaßen tun:

Beispiel
%Let prefix=Var;
Var &prefix.1-&prefix.10;

Der Punkt beendet die Makro-Anweisung und es wird die Var-Anweisung var item1-item10 erzeugt. Ohne den Punkt sucht der Makro-Prozessor nach den Makrovariablen "&prefix1", bzw. "&prefix10".

Zur Erzeugung eines zweiteiligen SAS-Dateinamens sind daher zwei hintereinander folgende Punkte zu verwenden: Einen zum Beenden der Makrovariablen, den anderen zur Abtrennung des Librefs vom Dateinamen:

Beispiel Ergebnis
%Let lref=mein;
%Let dat=eins;
(Definition der Makrovariablen "lref" und "dat")
Data &lref&dat; 
erzeugt
Data meineins;
Data &lref.&dat;  
erzeugt ebenfalls
Data meineins;
Data &lref..&dat;  
erzeugt dagegen
Data mein.eins;

Indirekte Zuweisung von Werten

Beispiel Ergebnis
%Let device=winprnt;
%Let &device=online;
(Definition der Makrovariablen "device" und "&device")
%Put &device=&winprnt; 
winprnt=online
%Put der &device ist &winprnt;  
der winprnt ist online

Die Zeile "%Put der &device ist &winprnt;" liefert "der winprnt ist online", da die eingesetzte Makrovariable &device zu "winprnt" aufgelöst wird.

Das Auflösen von mehrfachen Ampersands

Zwei Ampersands (&&) lösen sich zu einem Ampersand (&) auf. Mehrfache Ampersands sind sinnvoll beim Auflösen von Variablen, die einen gemeinsamen Stamm und numerische Endungen haben.

Beispiel Ergebnis
%Let device1=winprnt;
%Let device2=winprntg;
%Let device3=winprntc;
%Let n=3;
(Definition der Makrovariablen "device1", "device2", "device3" und "n")
%Put &device&n; 
erzeugt einen Fehler, da "&device" nicht referenziert ist.
%Put &&device&n;   
löst zuerst && zu "&" auf, danach &n zu "3" und letztendlich &device3 zu "winprntc".

Siehe auch

Literatur

  • Ortseifen, C.(1993): Einführung in die SAS-Makro-Programmierung - Begleitskript zur Vorlesung Wintersemester 1993/1994 - nicht veröffentlicht.
  • SAS 9.3 Macro Language – Reference.