2016-09-22 50 views
0

我使用下面的语句功能的SAS如何使用宏函数调用的循环在SAS

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

在那里我已经先前在代码中定义的loopit宏调用。正如可以看到的那样,在函数调用中,只有一个参数发生变化,而其他参数相同。我想如果有任何循环结构(例如数组)可以用来使它更有用。

回答

0

您可以定义的参数,通过循环列表,然后调用%loopit他们每个人:

%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

更好的做法是将'param_list'作为'%loop_them'的一个参数。 – Joe

+0

并使宏和本地和&this_param%为本地,以避免冲突。 – Quentin

0

可以使用call execute功能。例如,如果你有一个顺序式计数的基础参数,你逝去的,那么你可以使用下面的代码:

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

我不完全确信上面使用的语法。谷歌更清晰。我早些时候以相同的方式使用了call execute