我在下面的代碼中試圖轉換壓縮函數。SAS日期宏和壓縮函數
舊代碼:(此代碼的工作,並返回以下結果)
data _null_;
%let startdt='2015/11/1';
date_num=compress(&startdt,"'");
call symputx('date_num',date_num);
%put &startdt;
%put &date_num;
run;
此代碼爲宏變量startdt如2015年11月1日和datenum如2015年11月1日返回值。
我正在嘗試使用宏變量進行日期類似的功能。
新的代碼:(此代碼給我一個錯誤,我無法弄清楚爲什麼)
data _null_;
dt = date();
last_mth_beg = intnx('month',dt,-1,'beginning');
call symput('startdt',put(last_mth_beg,YYMMDDS10.));
date_num=compress(&startdt,"'");
call symputx('date_num',date_num);
%put &startdt;
%put &date_num;
run;
當我運行這個新的代碼,我得到一個錯誤。我想要得到像舊代碼一樣的結果。 請幫忙。謝謝!
移動你的'%LET'和'%PUT'語句在數據步之前或之後,因爲那是SAS要評估它們時,它使您的代碼更易於閱讀和理解。將它們留在數據步驟的中間使得它看起來像是在數據步驟運行時如何進行評估,這是不正確的。這是否解決了您的問題? – Tom
嗨,這不能解決問題。錯誤出現在沒有let語句的「新代碼」中。謝謝! – PJay
您的第二個數據步驟也應該運行良好,但您需要將'%PUT'語句移至'run;'語句之後。否則,它們會產生一個錯誤,即宏變量不存在,或者更糟糕的是,它們會向您顯示它們在數據步驟運行之前所具有的值。 – Tom