2014-07-14 39 views
3

我正在嘗試使用SAS。我創建了一個數據集,其中變量的數量取決於用戶選擇的時間段。我想要做的是循環這些變量。我試圖用這個宏是(我justed固定日期爲例子):在SAS中使用函數do

%MACRO DO_PERIOD; 
    %DO I = 1 %TO %SYSFUNC(intck('month', "01JUL2008"d, "31JUL2009"d)); 
     %PUT %I 
    %END; 
%MEND DO_PERIOD; 

不幸的是運行此宏產生以下錯誤:

ERROR: A character operand was found in the %EVAL function or %IF 
condition where a numeric operand is required. 
The condition was: %sysfunc(intck('month', "01JUL2008"d, "31JUL2009"d)) 
ERROR: The %TO value of the %DO I loop is invalid. 
ERROR: The macro DO_PERIOD will stop executing. 

我試圖評估的多種方式intck函數(例如%eval(%sysfunc(....)),使用輸入(...)),但沒有任何結果。我希望你們中有人知道在%do語句中評估函數的答案。

回答

4

的幾個問題:

  1. 在宏觀,沒有必要引用文字(如「月」) - 一切都爲文本處理。
  2. 你錯過了在%PUT語句
  3. 你需要一個AMPERSAND表示宏變量(不是%符號,它調用

看到一個分號:

%MACRO DO_PERIOD; 
    %DO I = 1 %TO %SYSFUNC(intck(MONTH, "01JUL2008"d,"31JUL2009"d)); 
    %PUT &I; 
    %END; 
%MEND; 
%DO_PERIOD; 
+0

非常感謝!將代碼放入StackExchange時,Apersand是一個錯字。經過一番試驗後,我發現真正的問題是'MONTH'周圍的引號。留下這些解決了問題! –