SAS 将 intnx 的"中间"参数设置为始终设置为 15th



我有以下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;

上面的代码表示,如果今天日期的日期部分小于或等于15,则将date2设置为上个月的中旬,将date1设置为上个月的最后/结束。否则,设置date2为本月初,date1为本月中。

我喜欢SAS如何用'm'或'middle'来获得这个月的中间日期。对于那些有30天,中间是15天的月份,这个方法非常有效。但在有31天的月份,它总是落在16日,2月是特例。我想把中间的时间定在15号。

我尝试在每行添加'-1'以检查它是否会给我所需要的,但是当我调用变量时它返回一个空白日期。对于不工作的日期调用,它返回一个带-1的点。

其中一个是%put &rpt_dt. &rpt_dt2.; . 01-JAN-2023

因为一月份有31天,如果我把-1写成这样:

date1=put(intnx('month',today,0,'m')-1, date11.); 

我将得到所需的1月15日,但它将不是动态的。如果带有-1的相同代码将在下个月运行,代码将总是减去1,并且它将落在中间的前一天,与有30天的月份相同。

如果你真的想让它恰好是15号,那么为什么不这样做呢?

date1=put(intnx('month',today,0,'b')+14, date11.); 

对我来说似乎很简单…

相关内容

  • 没有找到相关文章

最新更新