0

我想将 1 天添加到任意 SAS 日期。我有以下有效的代码,但我想知道是否有对这样的日期计算的内置支持:

proc fcmp outlib=whatever;  
function lastDayInYear(d);  
    if datdif(d,mdy(12,31,year(d)),'ACT/365')=0 then return(1); else return(0);  
endsub;  

function advanceDate(d);
    if d=. then return(.);
    if lastDayInYear(d) then
        return(mdy(1,1,year(d)+1));
    else
        return(datejul(juldate7(d)+1));
endsub;
quit;
4

3 回答 3

9

日期只是数字,所以要提前一天,你只需,嗯,加 1。

你在哪里找到那个代码?谈论用大锤敲碎坚果......

于 2012-06-26T14:29:52.260 回答
7

Itzy 是对的......只需添加 1。如果您想做更高级的日期计算,您可以使用intnx()andintck()函数。

例如

data _null_;
  tomorrow            = date() + 1;
  same_day_next_month = intnx('month',date(),1,'same');
  first_day_next_week = intnx('week' ,date(),1,'beginning');
  last_day_of_year    = intnx('year' ,date(),0,'end');

  put _all_; 
run;
于 2012-06-26T15:51:43.163 回答
6

在 SAS 中,没有 DATE 或 DATETIME 数据类型,此类值存储为通用数值数据类型,其中对于日期:存储的数字表示表示的日期和 1960 年 1 月 1 日之间的天数。对于日期时间,它类似,只有秒数是存储。您将在下面的代码中看到这一点。人类可读的日期、时间和日期时间表示是通过 SAS 日期/时间格式实现的。如需进一步解释,只需在网络和文档上搜索 SAS 日期即可。

回到你的问题:要在代表 DATE 的值上添加一天,只需进行数学加法:+1。

data _null_;
    length mydate mydatetime 8;
    mydate='1jan1960'd;
    mydatetime='1jan1960:00:00:00'dt;
    nextdate = mydate + 1;
    nextminute = mydatetime + 60;
    put mydate 8. +4 mydate yymmdds10.;
    put nextdate 8. +4 nextdate yymmdds10.;
    put mydatetime 12. +4 mydatetime datetime.;
    put nextminute 12. +4 nextminute datetime.;
run;
于 2012-06-26T14:32:02.607 回答