我正在尝试创建一个表,该表始终使用case函数显示上个月的最后一个星期五,但是我在使用代码时遇到了麻烦。
%let eomb=%sysfunc(Case
when %sysfunc(weekday(intnx(month, "&sysdate", -1, end))=1) then %sysfunc(intnx(month, "&sysdate", -1, end)-2)
when %sysfunc(weekday(intnx(month, "&sysdate", -1, end))=7) then %sysfunc(intnx(month, "&sysdate", -1, end)-1)
else %sysfunc(intnx(month, "&sysdate", -1, end))
end);
%put &eomb.;
proc sql;
create table SNAP_DT
(SNAP_DT DATE FORMAT = date9.
INFORMAT = date9.);
INSERT INTO SNAP_DT
Values (&eomb);
run;
答案 0 :(得分:1)
您不能在这样的宏函数中使用CASE。您可以使用IFN或IFC。尽管使用INTNX可以得到相同的结果。 这是一种方法。
使用CALL SYMPUTX创建宏变量
data _null_;
prev_month = intnx('month', today(), -1, 'b');
x=nwkdom(5, 6, month(prev_month), year(prev_month));
call symputx('eomb', x, 'g');
run;
%put &eomb.;
您可以将所有内容嵌套在宏函数中,但这很多%SYSFUNC()令人讨厌调试。
%let eomb2 = %sysfunc(nwkdom(5,
6,
%sysfunc(month(%sysfunc(intnx(month, %sysfunc(today()), -1, b)))),
%sysfunc(year(%sysfunc(intnx(month, %sysfunc(today()), -1, b))))
)
);
%put &eomb2;