【问题标题】:SAS : Converting Text format to date format and finding difference between datesSAS:将文本格式转换为日期格式并查找日期之间的差异
【发布时间】:2014-06-27 10:28:45
【问题描述】:

我是 SAS 新手,我有如下数据集:

Payment 335861  36416   5   41641   41648
Payment 335861  85610   8   41641   41648
Payment 335861  99214   156 41641   41648

最后两列是文本格式的日期,当您从 excel 创建制表符分隔文件时会得到这种格式。

现在我想将这些数字转换为日期格式。然后找到差异(以天为单位) 对于因此得到的日期。 我尝试了“信息”的方式,但没有得到任何地方。请帮助....

【问题讨论】:

    标签: date sas date-difference


    【解决方案1】:
    data sample_data;
    infile cards;
    input type $ id amount count tdate1 $ tdate2 $;
    cards   ;
    Payment 335861  36416   5   41641   41648
    Payment 335861  85610   8   41641   41648
    Payment 335861  99214   156 41641   41648
    ;
    run;
    
    data out_data;
    set sample_data;
    format date1 date2 yymmdds10.; /* format=display number (of days) as DATE */
    date1 = input(tdate1, 5.);/* conversion from text to number 
                    (assuming it's a SAS date value=number of days from 1jan1960 */
    date2 = input(tdate2, 5.);
    datediff = date1 - date2; /* calculate date difference */
    run;
    

    示例假定您的“日期”来自 SAS,这意味着它是自 1960 年 1 月 1 日以来的天数。 这意味着值“41641”是 3jan2074。

    如果数字来自不同的数据源并且含义不同,您必须对数字/日期进行一些更正。

    例如在 excel '41641' 中是 2.1.2014 (它是自 1jan1900 + 1 以来的天数)。 在这种情况下需要的转换 + 调整是:

    date1 = input(tdate1, 5.) - ('1jan1960'd - '1jan1900'd) - 2;
    date2 = input(tdate2, 5.) - ('1jan1960'd - '1jan1900'd) - 2;
    

    【讨论】:

    • 非常好的和干净的解决方案。
    • 请注意,+1 是由于 Microsoft/Excel 中将 1900 年定义为闰年的错误。因此,如果您的日期恰好在 1900 年 2 月 28 日之前,则不需要 +1,但如果它们在该日期之后,则需要。
    猜你喜欢
    • 2016-09-20
    • 2016-12-02
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多