SAS:将文本格式转换为日期格式并查找日期之间的差异

时间:2014-06-27 10:28:46

标签: date sas date-difference

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

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

在最后两列中是文本格式的日期,即从excel制作制表符分隔文件时获得的日期。

现在我想将这些数字转换为日期格式。然后找出差异(以天为单位) 这样的日期。 我尝试了“信息”的方式但没有随处可见。请帮助......

1 个答案:

答案 0 :(得分:3)

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,这意味着它是自1jan1960以来的一些天。 这意味着'41641'的值是3jan2074。

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

E.g。在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;