2017-02-23 7 views
0

Ich möchte ein Programm, das eine Liste von Makrovariablennamen durchläuft und den Wert jeder Makrovariable innerhalb einer% DO-Schleife zurückgibt, anstatt nur den Makrovariablennamen zurückzugeben.SAS-Schleife durch Makrovariablen

%let macro_list = AA BB CC; 
%let loop = %sysfunc(countw(&macro_list.)); 

%let AA = 123; 
%let BB = 456; 
%let CC = 789; 

%macro test(); 

    %do i = 1 %to &loop.; 

%let var = %scan(&macro_list.,&i); 
%put &var.; /* I want this to return 123 not AA!!!*/ 

    %end; 
%mend test; 

%test; 

Derzeit ist das Makro gibt die Werte von AA, BB, CC anstelle von 123, 456, 789.

ich auch auf andere Wege offen wäre dies umzusetzen. Vielen Dank!

+0

Wenn Sie nach '& var' fragen, wird der Wert von' var' zurückgegeben, der aus der Liste stammt. Fragen Sie nach '&& var.' und es gibt' & AA' zurück, was dann in 123 aufgelöst wird. Google "Auflösung des doppelten kaufmännischen Und-Zeichens SAS" für weitere Informationen. – mjsqu

Antwort

2

Sie benötigen %superq() Funktion mehr &

%put &var = &&&var ; 

oder verwenden, um hinzuzufügen.

%put &var = %superq(&var) ; 
+0

Danke, ich habe zwei && während meiner Fehlersuche ausprobiert, hätte drei &&& !!! % superq() sieht ordentlich aus und sollte einfacher zu lesen sein. – Wolfspirit

Verwandte Themen