我在下面的代码中试图转换压缩函数。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