我想在任意SAS日期添加1天。我有以下代码可以工作,但我想知道有这样的日期计算的内置支持:
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;
答案 0 :(得分:9)
日期只是数字,所以要把这一天推进一天,你只是,嗯,加1。
您在哪里找到该代码?谈论用大锤敲打坚果......
答案 1 :(得分:7)
Itzy是对的...只需添加1.如果您想进行更高级的日期计算,可以使用intnx()
和intck()
函数。
e.g。
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;
答案 2 :(得分:6)
在SAS中,没有DATE或DATETIME数据类型,这些值存储为通用数值数据类型,其中对于日期:存储的数字表示代表日期和1960年1月1日之间的天数。对于datetime,它是相似的,只有数字存储秒数。您将在下面的代码中看到这一点。 人类可读日期,时间和日期时间表示通过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;