2016-09-22 6 views
0

ich folgende Aussagen verwende für die Funktion in sas ruftWie Schleifen verwenden, um Makro-Funktionsaufrufe in sas

%loopit(26062015,bbbbbbINFY,FUTSTK,30Jul2015); 
%loopit(26062015,bbbbbbSBIN,FUTSTK,30Jul2015); 
%loopit(26062015,bbbbbbbTCS,FUTSTK,30Jul2015); 

, wo ich bereits definiert haben die loopit Makro zuvor im Code haben. Wie man sieht, ändert sich in den Funktionsaufrufen nur ein Parameter, während der Rest gleich ist. Ich wollte, wenn es irgendwelche Schleifenstrukturen (z. B. Arrays) gibt, die ich verwenden kann, um es nützlicher zu machen.

Antwort

0

Sie können eine Liste von Parametern definieren Schleife durch und rufen dann %loopit auf jeden von ihnen:

%let param_list = bbbbbbINFY bbbbbbSBIN bbbbbbbTCS; 

%macro loop_them; 

    %do i = 1 %to %sysfunc(countw(&param_list.)); 
    %let this_param = %scan(&param_list., &i.); 

     %loopit(26062015,&this_param.,FUTSTK,30Jul2015); 

    %end; 

%mend loop_them; 

%loop_them; 
+1

Viel besser wäre 'param_list' ein Parameter für'% loop_them'. – Joe

+0

Und make & i und & this_param% local zum Makro, um Kollisionen zu vermeiden. – Quentin

0

Sie die call execute Funktion verwenden können. Wenn Sie zum Beispiel haben eine sequentielle Zählung Basis Parameter Sie übergeben, dann können Sie den folgenden Code verwenden:

Data _NULL_; 
count = 0; 
for i=0 to 10; 
call execute (‘%loopit(count)’); 
end; 
run; 

Ich bin nicht ganz sicher über die Syntax oben verwendet. Google für mehr Klarheit. Ich habe call execute auf die gleiche Weise früher verwendet.

Verwandte Themen