我有以下 SAS 代码:
DATA _NULL_;
today = today();
if day(today) ge 1 and day(today) le 15 then do;
date2=put(intnx('month',today,-1,'m'), date11.);
date1=put(intnx('month',today,-1,'E'), date11.);
end;
if day(today) > 15 then do;
date2=put(intnx('month',today,0,'B'), date11.);
date1=put(intnx('month',today,0,'m'), date11.);
end;
call symput('dt',date1);
call symput('dt2',date2);
RUN;
Run Code Online (Sandbox Code Playgroud)
上面的代码表示,如果今天的日期部分小于或等于 15,则将 date2 设置为上个月中旬,将 date1 设置为上个月的最后/月底。否则,将 date2 设置为当月月初,将 date1 设置为当月中旬。
我喜欢 SAS 使用“m”或“middle”来获取该月的中间日期。它非常适合有 30 天且中间日期为 15 日的月份。但对于有 31 天的月份,它总是在 16 日,二月是特例。我希望始终将中间放在 15 号。
我尝试在每一行添加“-1”以检查它是否能给我所需的内容,但当我调用该变量时它返回一个空白日期。对于不工作的日期调用,它返回一个点 -1。
其中之一是%put &rpt_dt. &rpt_dt2.; . 01-JAN-2023
由于 1 月有 31 天,如果我这样设置 -1:
date1=put(intnx('month',today,0,'m')-1, date11.);
Run Code Online (Sandbox Code Playgroud)
我会得到想要的 1 …