這裏是我的代碼我如何通過變量的值傳遞給宏在SAS
%macro redemptions1(startdate, enddate, sd, ed, sunday1, sunday2);
data _null_;
%put &startdate;
run;
%mend redemptions1;
data _null_;
format tday date9.;
format sd date9.;
format ed date9.;
tday=today();
if weekday(tday) = 1 then do; ed = intnx('day',tday,-9); sd = intnx('day',tday,-15);end;
if weekday(tday) = 2 then do; ed = intnx('day',tday,-3); sd = intnx('day',tday,-9);end;
if weekday(tday) = 3 then do; ed = intnx('day',tday,-4); sd = intnx('day',tday,-10);end;
if weekday(tday) = 4 then do; ed = intnx('day',tday,-5); sd = intnx('day',tday,-11);end;
if weekday(tday) = 5 then do; ed = intnx('day',tday,-6); sd = intnx('day',tday,-12);end;
if weekday(tday) = 6 then do; ed = intnx('day',tday,-7); sd = intnx('day',tday,-13);end;
if weekday(tday) = 7 then do; ed = intnx('day',tday,-8); sd = intnx('day',tday,-14);end;
startdate = (year(sd) - 1900) * 10000 + month(sd) * 100 + day(sd);
enddate = (year(ed) - 1900) * 10000 + month(ed) * 100 + day(ed);
sunday1 = year(intnx('day',sd,-6))*10000+month(intnx('day',sd,-6))*100+day(intnx('day',sd,-6));
sunday2 = year(intnx('day',sd,1))*10000+month(intnx('day',sd,1))*100+day(intnx('day',sd,1));
%redemptions1(startdate,enddate,sd,ed,sunday1,sunday2);
run;
如果我通過傳遞變量值起始日期,結束日期等,該redemeptions1宏只是打印「開始日期」,而不是實際印刷startdate的值。我如何獲得它打印變量(s)中包含的值?
謝謝!
感謝您的迴應克里斯。我確實嘗試了上面提到的方法,它說變量未初始化。我試圖通過執行調用來將PUT中的startdate放入宏中,但它向我拋出了錯誤「變量未初始化」。 W.r.t的日期,是的,我正在尋找特定的格式,因爲我的數據集要求它。 – bhavya
什麼說「變量未初始化」?確保CALL EXECUTE是數據步驟的一部分,即在最終'運行'之前。在宏中,您可以刪除'data _null_;'和'跑';只是保留'%put'語句,但我不希望有任何其他消息。嘗試CALL EXECUTE的兩行版本並添加'put myCall =;'以確認正在執行的內容。設置選項MPRINT SYMBOLGEN也可能有助於診斷問題。 –
謝謝克里斯,它現在工作。 – bhavya