Einführung in die SAS Makro Programmierung

Aus SAS-Wiki
Wechseln zu: Navigation, Suche

Was ist ein SAS-Makro?

Ein SAS-Makro ist ein in der SAS-Makro-Sprache geschriebenes Programm, welches aus SAS-Elementen wie z.B. Prozedur- und Datenschritten bestehen kann. Falls Sie regelmäßig die gleichen Programmanweisungen durchführen müssen, kann es zeitsparend sein, sich dafür ein Makro zu schreiben. Nachdem das Makro einmal aktiviert ist, kann es immer wieder allein durch seinen Namen aufgerufen und benutzt werden.

Das Makro spricht einen eigens für die Makro-Sprache bereitgestellten Prozessor an, der durch Schlüsselzeichen, wie z.B. das Prozentzeichen "%" aktiviert wird. Dieser Prozessor nennt sich Makro-Prozessor. Mit Hilfe der SAS-Makro-Sprache können Sie mit ihm kommunizieren.

Makro-Definition
%Macro p(table);
  Proc Print data=&table;
  Run;
%Mend;
Makro-Aufruf
%p( sashelp.class );
%p( sashelp.prdsale(obs=10) );
%p( sashelp.class(keep=name sex age) );

Bevor Sie mit einem Makro arbeiten können, müssen sie es kompilieren. Dies geschieht dadurch, dass sie das gesamte Makro submittieren. Erst danach kann das Makro verwendet werden. Durch den Aufruf des Makros wird der Makro-Prozessor aktiviert, der die Makroanweisungen in SAS Befehle umwandelt. Mit der Systemoption MPRINT kann dieser Übersetzungsvorgang nachvollzogen werden. Anschließend wird das daraus resultierende Programm ausgeführt. Das Makro "p" gibt den Inhalt des im Makroparameter "table" übergebenen Datasets ins Outputfenster aus. Der Anwender muss die genaue Syntax der PRINT Prozedur nicht wissen und spart durch die Verwendung des Makros zusäzlich Schreibaufwand.

Man sollte immer im Hinterkopf behalten, dass SAS-Makros lediglich SAS Programme erzeugen und dann ausführen. Im Prinzip wird einfach nur Text durch SAS Anweisungen ersetzt.

Wo wird die SAS-Makro-Sprache eingesetzt?

Die SAS-Makro-Sprache wird an folgenden Stellen eingesetzt:

  • Zusammenfassung von Prozedur- und Datenschritten, die häufig wiederholt werden müssen
  • Erzeugung von Anwendungen, die das SAS-System bisher nicht anbietet
  • Erzeugung von datenabhängigen Programmen durch eine Schnittstelle zu SAS-Dateien (DATA Step Interface)
  • Entwicklung von Eingabefenstern
  • Automatische Einbindung von Systeminformationen (z.B. Datum, Uhrzeit und Betriebssystem)
  • Bedingtes Ausführen von Daten- und Prozedurschritten
  • Dynamische Erzeugung von SAS Programmen

Elemente der Makro-Sprache

Es gibt vier wesentliche Elemente der SAS-Makro-Sprache:

  1. Makrovariablen
  2. Makro-Programmanweisungen
  3. Makro-Funktionen
  4. Makro-Routinen

1. Makrovariablen unterscheiden sich grundlegend von den Variablen einer SAS-Tabelle und der Variablen im Datenschritt. Der Wert einer Datenschritt-Variablen hängt von der Beobachtung ab, die sie gerade darstellt. Datenschritt-Variablen können nur in Daten- oder Prozedurschritten verwendet werden. Makrovariablen sind dagegen überall einsetzbar. Sie haben einen konstanten Wert, der ihnen zugewiesen oder vorgegeben wird. Makrovariablen speichern Zeichenketten ab und können manipuliert werden. Es gibt zwei unterschiedliche Arten von Makrovariablen: Benutzerdefinierte und Automatische Makrovariablen.

Benutzerdefinierte Makrovariablen können, wie der Name schon sagt, vom Benutzer selbst bestimmt werden. Sie können lokal oder global vereinbart werden (siehe SAS-Makrovariablen). Ihr zugewiesener Wert bleibt konstant bis er explizit geändert wird.
Automatische Makrovariablen beginnen immer mit den Buchstaben SYS. Sie enthalten z.B. Informationen über das Datum, das Betriebssystem oder den Ausführungsmodus.

2. Makro-Programmanweisungen sind den Anweisungen im Datenschritt ähnlich. Der Unterschied besteht darin, dass Makro-Programmanweisungen immer mit "%" beginnen, auf das ein Makro-Schlüsselwort folgt. Sie können z.B. Variablen verändern, Werte zuweisen und ausgeben, und sie können Verzweigen und bedingtes Ausführen (%IF..%THEN) von SAS-Anweisungen herbeiführen.

3. Makro-Funktionen verarbeiten Argumente (z.B. Zeichenketten). Sie können z.B. logische Ausdrücke auswerten und Zeichenketten zählen. Sie sind den Funktionen im Datenschritt ähnlich, weisen darüber hinaus aber auch spezielle Möglichkeiten auf, die nur im Makrobereich gelten. Makro-Funktionen sind auch im Daten- oder Prozedurschritt einsetzbar.

4. Makro-Routinen bewerkstelligen z.B. den Datenaustausch zwischen Makros und Datenschritt (Symput, Symget) oder rufen Anwendungen innerhalb eines Makros auf.

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.