Es gibt zwei Aspekte der Makrocode in SAS definiert werden: der Makrocode, und die Makroparameter zusammengestellt wird:
Makrocode:
Die Der Makrocode selbst ist sehr einfach, wenn das Token %macro
gefunden wird, beginnt das SAS-System ein SAS-Makro zu kompilieren und kompiliert weiter, bis es ein %mend
Token erreicht. Die einzigen wirklichen Probleme, denen Sie begegnen können, sind, wenn Sie den Makro-Code aktualisieren und ihn nicht erneut kompilieren, bevor Sie ihn ausführen - in diesen Situationen wird immer noch die alte Version ausgeführt, die er in der Makro-Bibliothek hat. Wenn Sie versuchen, ein Makro zu kompilieren, das ein anderes Makro aufruft, das noch nicht definiert wurde, erhalten Sie eine Fehlermeldung. Aus diesen Gründen müssen sie in der Reihenfolge programmiert werden, in dem sie aufgerufen werden (wie im folgenden Beispiel gezeigt:% level3 kommt vor% Level2, die vor% ebenen1 kommt)
Makrovariablen: Wenn Makro definiert, Variablen gibt es zwei Bereiche: Global und Lokal. Einmal definiert, kann auf globale Variablen überall und zu jeder Zeit zugegriffen werden. Lokale Variablen existieren jedoch nur lokal während der Ausführung des Makros, in dem sie definiert wurde.Durch die Erweiterung, wenn das Makro, wo die lokale Variable definiert wurde, alle anderen Makros aufruft, wird die lokale Makrovariable noch zugänglich sein:
Arbeitsbeispiel:
Im folgenden Beispiel sind die Makros definiert In umgekehrter Reihenfolge zu verhindern, dass SAS einen Appellent Aufruf von Makro Warnung zurückgibt.
Das Diagramm unten zeigt die Struktur der folgenden Makros in dem folgenden Beispiel:
|-----------------------------|
|GLOBAL |
| |------------------------| |
| |LEVEL1 | |
| | |-------------------| | |
| | |LEVEL2 | | |
| | | |--------------| | | |
| | | | LEVEL3 | | | |
| | | |--------------| | | |
| | |-------------------| | |
| |------------------------| |
|-----------------------------|
Kompilieren die verschachtelten Makros:
%macro level3 ;
%put **** START LEVEL3 **** ;
%local G1;
%let G1=Local ;
%do i=1 %to 2 ;
%put In the macro do loop I=&i ;
%end ;
%put The value of I at level3 is: &I ;
%put Are we accessing global or local G1 variable here: &G1 ;
%put **** END LEVEL3 ****;
%mend level3 ;
%macro level2 ;
%put **** START LEVEL2 **** ;
%*global L1 ; *<-- this would produce an error because the variable name has already been added to the local scope in %level1 ;
%put Are we accessing global or local G1 variable here: &G1 ;
%put Can we access local variables here: &L1 ;
%level3 ;
%put The value of I in level2 is: &I ;
%put **** END LEVEL2 ****;
%mend level2 ;
Kompilieren der Top-Level-Makro (die die oben wiederum ruft zwei Makros) und führen Sie es aus:
%let G1=Global;
%macro level1 ;
%put **** START LEVEL1 **** ;
%let L1=Yes;
%put Are we accessing global or local G1 variable here: &G1 ;
%put Can we access local variables here: &L1 ;
%level2 ;
%put The value of I outside of the local macro is: &I ;
%put Are we accessing global or local G1 variable here: &G1 ;
%put **** END LEVEL1 ****;
%mend level1 ;
%level1 ;
Punkte zu beachten, wenn th e log:
- Außerhalb% level3, kehrt & ich eine Warnung, dass die Makrovariable nicht existiert nicht
- Innerhalb% level3, wenn & G1 bezeichnet wird, wird der Wert in der lokalen Bereich gespeichert zurück von% level3.Once außerhalb von% level3 gibt der Wert auf den global gespeicherten Wert zurück.
Technisch gesehen lädt die Autocall-Bibliothek keine Makros 'vorhand'. Wenn der Benutzer versucht, ein Makro auszuführen, und dieser Makro noch nicht definiert wurde, sucht SAS in der Autocall-Bibliothek danach. Wenn es einen Dateinamen gefunden hat, der dem Aufruf entspricht und diese Datei einen Makronamen enthält, der dem Aufruf entspricht, wird das Makro nur dann kompiliert. Wenn Sie dann Änderungen an dieser Datei in der AutoCAD-Bibliothek vornehmen, müssen Sie den Code erneut manuell einreichen, damit diese Änderungen in einer interaktiven SAS-Sitzung verfügbar werden. –