日期计算在SAS(Date calculations in SAS)

2019-06-25 19:20发布

我想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;

Answer 1:

Itzy是正确的...只需添加1,如果你想要做更高级的日期计算,你可以使用intnx()intck()函数。

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;


Answer 2:

日期只是数字,因此通过一个提前一天,你刚刚,呃,加1。

你在哪里找到的代码? 谈论使用大锤牛刀...



Answer 3:

在SAS,没有日期或日期时间的数据类型,这样的值被存储为通用数字数据类型,其中对于日期:存储在所述数字表示日期表示和1月1日1960年之间的天对于日期时间是类似的号码,只有秒数是存储。 您将在下面的代码里发现。 人类可读的日期,时间和日期时间表示经由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;


文章来源: Date calculations in SAS
标签: sas