【问题标题】:INTNX Function is One Day OffINTNX 功能放假一天
【发布时间】:2014-07-23 22:15:20
【问题描述】:

我正在使用 INTNX 函数来计算月份间隔。我发现结果通常与我的预期相差一天......例如,看看这段代码:

data test;
    olddate='20140531';
    oldsasdate=input(olddate,yymmdd8.);
    newsasdate=intnx('month',oldsasdate,-17);
    newdate=put(newsasdate,yymmdd8.);
run;

在此代码中,我尝试查找 2014 年 5 月 31 日之前 17 个月的日期。我希望该函数返回 2012 年 11 月 30 日,但它反而返回 2012 年 12 月 1 日。知道这里发生了什么吗?有没有办法解决这个问题?

【问题讨论】:

  • 注意,即使相同对齐,它也不应该返回 11/30,而是 12/31,根据您的代码(5 月 31 日之前的 17 个月是 12 月 31 日:5 月是第 5 个月,所以5 个月前是 12 月,然后是 12 月之前的 12 个月)。

标签: sas


【解决方案1】:

intnx 的默认值与月初对齐。它基本上跟踪区间边界,因此每次从 MM/01/YY 到 MM/30/YY 时,它都会标记一个跨过的区间。

所以,

data _null_;
 x  = intnx('month','31MAY2014'd, -1);
 put x= date9.;
run;

返回 '01APR14'd,而不是 '30APR14'd。

您可以使用可选的第四个参数将其更改为“相同”对齐(我相信是 SAS 9.2+)。

data _null_;
 x  = intnx('month','31MAY2014'd, -1,'s');
 put x= date9.;
run;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-22
    • 1970-01-01
    相关资源
    最近更新 更多