%Macro-Anweisung

Aus SAS-Wiki
Wechseln zu: Navigation, Suche

Definition und Aufruf von SAS-Makros

Ein SAS-Makro ist ein Text zwischen einer %Macro und einer %Mend-Anweisung.

Syntax
%Macro name(parameter) / optionen;
  Makrotext;
%Mend name;
Beispiel
%Macro datum;
  Title "Heute ist &Sysday, der &Sysdate";
%Mend datum;
Aufruf
%datum

Das Makro %datum erzeugt automatisch eine Überschrift mit dem aktuellen Datum.

Die %Macro-Anweisung

  • beginnt die Definition des Makros,
  • weist dem Makro einen Namen zu und
  • kann (optional) eine Parameterliste und Optionen übergeben.

Makro-Name

Der Name des Makros muss ein gültiger SAS-Name sein.

Es gibt reservierte Worte, die nicht verwendet werden dürfen, etwa GO,RUN,OPEN usw.. Werden Sie trotzdem verwendet, erscheint folgende Fehlermeldung:

ERROR: Macro NAME has been given a reserved name.
ERROR: A dummy macro will be compiled.

Makro-Parameter

Makro-Parameter sind Makrovariablen, die mit dem Aufruf an das Makro übergeben werden. Dies ist, neben der %Let-Anweisung, eine weitere Art, Makrovariablen zu bilden.

Beispiel
%Macro mittel (sds);      
  Proc Means Data=&sds;
  Run;
%Mend mittel;
Aufruf
%mittel(sashelp.class)

In Klammern steht der Wert, der an die Makrovariablen sds übergeben wird. In diesem Beispiel bekommt der Parameter sds den Wert sashelp.class zugewiesen. Die Parameter in der Makro-Definition

  • sind in Klammern eingeschlossen,
  • werden durch Kommas getrennt,
  • können mit ihrer Position oder mit einem Schlüsselwort spezifiziert werden und
  • definieren lokale Makrovariablen, d.h. Variablen, die nur während der Ausführung des Makros gültig sind (m Gegensatz zu globalen Makrovariablen, siehe Lokale und globale Makrovariablen)

Positions- und Schlüsselparameter

Makro-Parameter können entweder als Positionsparameter (posparm) oder Schlüsselparameter (keyparm) übergeben werden. Der wesentliche Unterschied zwischen beiden besteht darin, dass das Makro Positionsparameter allein durch ihre Position beim Aufruf erkennt und Schlüsselparameter mit Variablennamen und Gleichheitszeichen aufgelistet werden müssen.

Beispiel für Positionsparameter
%Macro name(posparm-1, posparm-2);
Beispiel für Schlüsselparameter
%Macro name(keyparm-1=wert1, keyparm-2=wert2);

Die Positionsparameter

  • erscheinen ohne Gleichheitszeichen,
  • müssen in der im Makro-Aufruf definierten Reihenfolge aufgelistet werden,
  • haben den Wert Null zum Zeitpunkt der Definition und können diesen beibehalten, wenn ein Komma als Platzhalter beim Aufruf eingesetzt wurde.

Die Schlüsselparameter

  • werden mit einem Gleichheitszeichen aufgelistet,
  • können in beliebiger Reihenfolge angegeben werden,
  • können mit Defaultwerten (auch Null) versehen werden und
  • brauchen beim Aufruf nicht genannt zu werden.

Positions- und Schlüsselparameter können auch gemeinsam in Makros auftreten, doch müssen die Positionsparameter zuerst aufgelistet werden.

Beispiel
%Macro print (var1,var2,var3,sds=_last_);
  Proc Print Data=&SDS;
    Var &var1 &var2 &var3;
  Run;
%Mend print;
Aufruf
%print(Age,Name,Sex,SDS=sashelp.class);

Die Positionsparameter Var1, Var2 und Var3 erhalten die Werte Age, Name und Sex. Der Schlüsselparameter SDS erhält den Wert sashelp.class. Der Defaultwert ist auf _last_ gesetzt; dies bedeutet, dass automatisch der zuletzt bearbeitete Datensatz verwendet wird, falls im Makroaufruf kein neuer Dateiname angegeben wird.

Beispiel
%Macro ttest (var1,var2,classvar,sds);
  Proc Ttest Data=&sds;
    Class &classvar;
    Var &var1 &var2 ;
  Run;
%Mend ttest;
Aufruf 1
%ttest (Age,Height,Sex,sashelp.class);
Aufruf 2
%ttest (Age,,Sex, sashelp.class);

Im zweiten Beispiel werden die Positionsparameter var1, var2, classvar und sds verwendet. Beim zweiten Aufruf soll der T-Test nur für eine Variable berechnet werden. Um eine Fehlermeldung zu vermeiden, muss anstelle eines Wertes für var2 ein Komma angegeben werden. Durch das Komma überspringt der Makro-Prozessor diesen Wert, und erkennt die nachfolgenden Variablen richtig.

Probieren Sie aus, was passiert, wenn sie bei Aufruf 2 das Komma weglassen.

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.