2016-11-09 12 views
0

我想執行一個函數調用傳遞日期參數行的數據集:SAS調用execute傳遞號作爲參數

data _Null_; set calc_dates; CALL EXECUTE ('%doStuff('||date||');'); run;

然而,這並不因爲作爲字符串傳遞了「日期」的工作。即使我嘗試將其轉換爲數字,任何數字評估都會爆炸。下面的工作圍繞工作,但感覺過於複雜: `

%macro loopMeUp; 
proc sql noprint; 
    select count(*) into :MaxActions from calc_dates; 
quit; 

%do i=1 %to &MaxActions; 
    data _NULL_; 
     set calc_dates; 
     if _N_=&i_sjm.; 
     call symput("temppi",date); 
    run; 
    %DoStuff(&temppi.); 
%end; 
%mend loopMeUp; 

` 任何人都知道如何通過數字(日期)作爲參數調用認爲執行程序或其他「簡單的方法」?

回答

0

您的代碼看起來好像沒什麼問題。 '日期'欄是什麼格式?正如你看到的下面,在未格式化的日期值傳遞給宏使用你的技術,因爲它會出現你期待:

%macro dostuff(param); 
    %put &param; 
    %mend; 
    data _null_; 
    format date date9.; 
    date='31DEC1999'd; 
    put date=; 
    call execute('%dostuff('!!date!!');'); 
    run; 

給出:

date=31DEC1999 
14609 

如果日期欄居然是一個字符字段,那麼您需要將其轉換爲日期(數字)類型才能執行計算。通過call symput傳遞這些值的方式是相同的。