2016-09-22 83 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