2016-06-08 1 views
0

Ich versuche, einen Variablenwert aus einem Dataset an ein Makro zu übergeben und in der Schleife do zu verwenden.Verwenden von SYMGETN zum Angeben der Anzahl der Schleifen in% DO-Anweisung

data work.b; 
    set work.a; 

    if _N_ = 1 then call symput('foo', foo_var); 
run; 

%macro bar(max_loop_count); 
    %do i = 1 %to &max_loop_count; 

     * Some data steps here ; 

    %end; 
%mend; 

%bar(symgetn('foo')); 

Allerdings erhalte ich diese Fehlermeldung:

ERROR: Required operator not found in expression: &max_loop_count 
ERROR: The %TO value of the %DO I loop is invalid. 
ERROR: The macro BAR will stop executing. 

Was mache ich falsch hier?

+0

Gibt es einen bestimmten Grund, symgetn anstelle von & foo bei macrocall zu verwenden? http://www.lexjansen.com/nesug/nesug04/pm/pm13.pdf Am Anfang der Seite 2 heißt es: "Umgekehrt ist SYMGET eine SAS-Sprache Funktion , die den Wert einer Makrovariablen an die zurückgibt DATA-Schritt während der Ausführung des DATA-Schritts. " Meine Vermutung wäre die Funktion symgetn ist nur für die Ausführung in einem Datastep, so dass Sie es nicht in einem Makroaufruf verwenden können. Aber ich kann das nicht mit mehr Referenzen sichern, also poste ich das nur als Kommentar. – kl78

Antwort

2

Ihr Makroaufruf würde die %DO Schleife mit dieser Obergrenze symgetn('foo') ergeben. Sie können SYMGETN() nicht in Makrocode verwenden, da es sich um eine Datenschrittfunktion handelt. Aus diesem Grund ist ein Fehler aufgetreten, dass die obere Grenze keine Zahl ist.

Übergeben Sie einfach den Wert der Makrovariablen im Makroaufruf.

%bar(&foo); 
+0

yep das ist die richtige Antwort. Ich kann nicht glauben, dass ich das verpasst habe. –

Verwandte Themen