2016-10-06 72 views
0

我正在測試宏循環。代碼很簡單,但總是出現錯誤消息「宏功能%SCAN具有太多參數」。無法理解原因。任何人都可以解釋它?謝謝! 的代碼是:簡單SAS宏中的錯誤

%macro test; 
proc sql;select distinct tj, max(tj) into: tp separated by ",", : maxtp from ASA_k where tj>0;quit;  

%do i=1 %to &maxtp.; 
    %let timep=%scan(&tp.,&i.,","); 
    %put &timep.; 
%end; 

%mend; 

%test; 

回答

4

在宏觀varriable,則存儲由逗號分隔的值,但這些逗號是有問題的。您需要在使用%bquote宏函數解析宏變量後對其進行掩碼。您的第三個參數%scan功能也不正確,因爲您的分隔符是,"。你必須使用宏函數掩蓋逗號。就像那樣:

%macro test; 
proc sql; 
    select distinct tj, max(tj) 
    into :tp separated by ",", :maxtp 
    from ASA_k 
    where tj>0; 
quit;  

%do i=1 %to &maxtp.; 
    %let timep=%scan(%bquote(&tp.),&i.,%str(,)); 
    %put &timep.; 
%end; 
%mend; 

%test; 
+0

或者只是由另一個字符分隔 –

+0

感謝您的解釋,羅伯特! – Andrea