添加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.;)。

+0

在SAS中,'datetime'仅仅是自1960-01-01 00:00:00以可读格式显示以来的秒数。这就是为什么添加'24 * 60 * 60 *有效'也可以工作 - 我不确定夏令时如何影响结果。 – Petr

+1

日期时间值没有夏令时的任何概念,所以您在那里给出的简单数学将适用于问题中的示例。我更喜欢intnx函数,因为它看起来更干净,我觉得它更易于理解。 – John