添加SAS日期时间格式的天数
问题描述:
我需要SAS日期时间格式的帮助。 数据集(包括所需的列exp_dt):添加SAS日期时间格式的天数
datetime valid exp_dt
4OCT2017:13.00.00 1 5OCT2017:13.00.00
4OCT2017:15.20.00 7 11OCT2017:15.20.00
6OCT2017:08.00.00 30 5NOV2017:08.00.00
所以,我需要的有效值(天数)添加到日期时间。 我刚刚开始使用SAS Base,我不确定是否有任何其他日期时间格式可以接受。 我已经试过这一点,但如果连要在正确的方向没有把握:
PlannedSchedTime = datetime ;
Postunit = 'DAY' ;
postval = valid ;
exp_dt = put(intnx(Postunit,PlannedSchedTime,postval,'same'),datetime20.);
put exp_dt= ;
run;
另外,我工作的项目SAS企业指南中,也许存在通过GUI任务更简单的方法?
答
这里的代码示例将打印您想要的结果。与其他答案状态一样,DTDAY
将告诉SAS在基准值是日期时间而不是日期时添加日期。
data datetimes;
informat datetime anydtdtm. valid best12.;
format datetime datetime20.;
input datetime valid;
cards;
4OCT2017:13.00.00 1
4OCT2017:15.20.00 7
6OCT2017:08.00.00 30
;
run;
data datetimes_added;
set datetimes;
format exp_dt datetime20.;
exp_dt = intnx('DTDAY',datetime,valid,'SAME');
put exp_dt = ;
run;
答
你绝对是在正确的道路上!由于您正在处理datetime
值,因此请将DAY
替换为dtDAY
。
如果您不希望exp_dt
成为字符列,请不要使用put
函数,而应使用格式(例如format exp_dt2 datetime20.;
)。
在SAS中,'datetime'仅仅是自1960-01-01 00:00:00以可读格式显示以来的秒数。这就是为什么添加'24 * 60 * 60 *有效'也可以工作 - 我不确定夏令时如何影响结果。 – Petr
日期时间值没有夏令时的任何概念,所以您在那里给出的简单数学将适用于问题中的示例。我更喜欢intnx函数,因为它看起来更干净,我觉得它更易于理解。 – John