Makro-Bibliotheken

Aus SAS-Wiki
Wechseln zu: Navigation, Suche

Einleitung

SAS-Makros werden (temporär oder permanent) in Bibliotheken abgelegt und können automatisch zur Verfügung gestellt werden. Die Makros werden in SAS-Katalogen unter dem Makro-Namen abgespeichert. Die Makros können als

  • Quelltext oder
  • kompiliertes Programm

abgespeichert werden. Quelltext-Makros müssen von SAS zunächst kompiliert werden, d.h. man lädt das Makro in den Programmeditor und submittiert es.

Automatischer Aufruf von Makros (Autocall Facility)

Es gibt verschiedene Systemoptionen, mit deren Hilfe Sie direkt auf ihre Makrobibliotheken zugreifen können, ohne sie als Quelltext in den Programm Editor zu laden. Den automatischen Makroaufruf nennt man 'Autocall'. Wo genau SAS nach Makros sucht, steht in der Datei config.sas.

System-Option Erklärung
MAUTOSOURCE / NOMAUTOSOURCE Bestimmt, ob die automatische Makrosuche (Autocall Facility) eingeschaltet werden soll.
SASAUTOS=Makrobibliothek Definiert die Makro-Bibliothek. Es gibt drei Möglichkeiten auf ihre Makrobibliothek zu verweisen:
  • über Fileref,
  • über eine Filename-Anweisung
  • oder mit direktem Namen in Anführungszeichen
MRECALL / NOMRECALL Veranlasst den Makro-Prozessor nach Makrobibliotheken zu suchen, die nicht bei der ersten Suche gefunden wurden.
MREPLACE / NOMREPLACE Veranlasst den Makro-Prozessor nach Makrobibliotheken zu suchen, die nicht bei der ersten Suche gefunden wurden.

Die Default-Einstellungen sind fett gedruckt.

Der Makro-Prozessor sucht Makros sequentiell in den Makro-Bibliotheken. Er sucht immer zuerst im Katalog WORK.SASMACR, in die kompilierte Makros automatisch während einer Sitzung abgespeichert werden (Siehe Automatisches Speichern von kompilierten Makros).

Beispiel: Ihre Makrobibliothek, in die Sie ihre Makros abgelegt haben, befindet sich im Verzeichnis 'C:\sas\makros'
Filename mymac 'c:\sas\makros';
Options Sasautos=(mymac urzmac);

oder:

Options Sasautos=('c:\sas\makros');

Sie können ihre Makros jetzt direkt aufrufen, indem sie den Makroaufruf im Programm-Editor submittieren.

%Ttest(Age,,Sex,sashelp.class);
%nobs(sasuser.crime);

Der Makro-Prozessor sucht jetzt zunächst im Katalog WORK.SASMACR und erst danach im Verzeichnis c:\sas\makros .

SAS stellt selbst einige Makros bereit. Sie befinden sich im Verzeichnis 'SASROOT\core\sasmacro'.

Die vollständige Liste aller von SAS zur Verfügung gestellten Makros finden Sie in der SAS-Online-Hilfe.

Folgende Fehlermeldung taucht auf, wenn Sie z.B. vergessen haben, die Filename-Anweisung für mymac zu setzen:

WARNING: No logical assign for filename MYMAC.
WARNING: Source level autocall is not found or cannot be opened. 
Autocall has been suspended and OPTION NOMAUTOSOURCE has been set. To use the
autocall facility again, set OPTION MAUTOSOURCE.
WARNING: Apparent invocation of macro DATATYP not resolved.

Sie beheben dies, in dem Sie die Filename-Anweisung richtig setzen, und außerdem die Systemoptionen MAUTOSOURCE und MRECALL bei der Options-Anweisung mitangeben (MAUTOSOURCE ist durch den Fehler ausgeschaltet worden).

Automatisches Speichern von kompilierten Makros

Standardmäßig werden alle Makros, die Sie während einer Sitzung kompilieren, im Katalog WORK.SASMACR abgespeichert.
Sobald Sie die Sitzung verlassen, wird dieser Katalog gelöscht.

Um kompilierte Makros in einem anderen Katalog (permanent) abzuspeichern, sind folgende System-Optionen notwendig:

System-Option Erklärung
MSTORED / NOMSTORED Erlaubt die Speicherung von SAS-Makros, in einem mit SASMSTORE vereinbarten Libref.
SASMSTORE=Libref Referenziert die SAS-Makro-Bibliothek, die die kompilierten SAS-Makros speichert.

Die Default-Einstellungen sind fett gedruckt.
Außerdem ist die %Macro-Option Store notwendig, ansonsten wird das kompilierte Makro im Katalog WORK.SASMACR gespeichert.

Beispiel: Sie wollen das Makro Nichts als kompiliertes Makro in dem Verzeichnis 'D:\Makros' abspeichern
Libname meinmak 'd:\makros'; 1) 
Options Mstored Sasmstore=meinmak; 2) 
%Macro Nichts /Store des='Nichts tut es'; 3) 
  %Put dieses makro macht nichts;
%Mend Nichts;

1) Sie referenzieren einen permanenten Makro-Katalog, in dem ihre kompilierten Makros gespeichert werden sollen.
2) Sie setzen die Optionen, und verweisen auf die vereinbarte Libref.
3) Sie geben mit der %Macro-Option Store an, dass dieses kompilierte Makro permanent als kompiliertes Makro abgespeichert werden soll. Außerdem können sie mit der Option des= eine bis zu 40 Zeichen lange Beschreibung des Makros mitspeichern, die im Katalog-Fenster erscheint.

Tipp:

Wenn Sie ein Makro in kompilierter Form ablegen, können Sie es nicht mehr als Quelltext in den Programm Editor laden. Speichern sie es deshalb zusätzlich als Quelltext ab.

Wollen Sie Makros aus dem permanenten Makro-Katalog bei der nächsten Sitzung verwenden, müssen sie erneut folgende Optionen setzen:

Libname meinmak 'd:\makros';
Options Mstored Sasmstore=meinmak;

sonst wird das Makro nicht gefunden.

Sie können permanente Makros über das Katalog-Fenster (Kommandozeile Catalog eingeben) oder über die Prozedur Catalog löschen.

Allgemeine Systemoptionen

System-Option Erklärung
CMDMAC / NOCMDMAC Erlaubt das Arbeiten mit "Command styled" Makros.
IMPLMAC / NOIMPLMAC Erlaubt das Arbeiten mit "Statement styled" Makros.
MACRO / NOMACRO Entscheidet ob der Makro-Prozessor in der aktuellen Sitzung zur Verfügung steht oder nicht.
MERROR / NOMERROR Der Makro-Prozessor schreibt folgende Warnung ins Log-Fenster, wenn er das Makro nicht finden kann:
WARNING: Apparent invocation of macro X not resolved.
MFILE/ NOMFILE Lenkt den mit MPRINT erzeugten Output in eine externe Datei um.
MINDELIMITER=<"option"> Legt das Trennzeichen beim Makro IN Operator fest.
MINOPERATOR / NOMINOPERATOR Der Makro IN Operator kann verwendet werden
MLOGIC / NOMLOGIC Gibt Informationen über die Ausführung des Makros ins Log-Fenster.
MLOGICNEST / NOMLOGICNEST Gibt die Verschachtelung eines Makros bei MLOGIC mit ins Log-Fenster aus.
MPRINT / NOMPRINT Zeigt SAS-Anweisungen im Log-Fenster an, die durch ein Makro generiert wurden.
MPRINTNEST / NOMPRINTNEST Gibt die Verschachtelung eines Makros bei MPRINT mit ins Log-Fenster aus.
SERROR / NOSERROR Der Makro-Prozessor schreibt folgende Warnung ins Log-Fenster, wenn er die Makro-Variable nicht finden kann:
WARNING: Apparent symbolic reference X not resolved.
SYMBOLGEN / NOSYMBOLGEN Zeigt an, ob Makro-Variablen aufgelöst wurden oder nicht.

Die Default-Einstellungen sind fett gedruckt.

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.