【问题标题】:Add a number of days to SAS datetime format向 SAS 日期时间格式添加天数
【发布时间】:2018-03-29 06:49:54
【问题描述】:

我需要有关 SAS 日期时间格式的帮助。 数据集(包括所需列 exp_dt):

    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 Enterprise Guide 中的项目,所以也许有更简单的方法来完成 GUI 任务?

【问题讨论】:

    标签: sas dataset base enterprise-guide


    【解决方案1】:

    这里有一个代码示例,它将打印您想要的结果。与其他答案状态一样,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;
    

    【讨论】:

      【解决方案2】:

      您绝对是在正确的道路上!因为您正在处理datetime 值,所以将DAY 替换为dtDAY

      如果您不希望 exp_dt 成为字符列,请不要使用 put 函数,而是使用格式(例如 format exp_dt2 datetime20.;)。

      【讨论】:

      • 在 SAS 中,datetime 只是自 1960-01-01 00:00:00 以人类可读格式显示以来的秒数。这就是为什么添加 24*60*60*valid 也可以工作的原因 - 我不确定夏令时会如何影响结果。
      • 日期时间值没有夏令时的任何概念,因此您在此处给出的简单数学适用于问题中的示例。我更喜欢 intnx 函数,因为它看起来更简洁,而且我发现它更容易解释。
      猜你喜欢
      • 1970-01-01
      • 2014-08-16
      • 1970-01-01
      • 2013-06-15
      • 2017-04-20
      • 2018-10-20
      • 1970-01-01
      • 1970-01-01
      • 2013-02-27
      相关资源
      最近更新 更多