我在excel文件中有以下名为Date的变量,我正在读到SAS:
Date
May2005
June2005
July2005
..
July2015
格式和信息都是字符($ 8)
我想将这些转换为SAS Date变量。 我怎样才能完成这项任务?
我想过使用substr来创建一个月份和年份变量, 然后使用proc格式将所有月份转换为数字(例如'jan'= 1)。 使用mdy日期函数创建新日期。但我想知道是否有更短的方法来完成这项任务?
答案 0 :(得分:2)
您可以使用ANYDTDTE。如果你在你的月份+年份字符串前面加上一天的信息。
data want ;
set have ;
actual_date = input('01'||date,anydtdte.);
format actual_date date9.;
run;
请注意,附加到字符变量的FORMAT或INFORMAT没有意义,但是只有长度为8的变量将不允许存储更长的月份名称。也许长度设置为仅为8,因为您的特定示例数据集不包含任何更长的月份名称。
如果您运行的是ANYDTDTE的旧版SAS。如果信息不存在或者在完全拼写的数月内不起作用,那么您将需要更加努力地工作。您可以将字符串转换为DATE9格式。
actual_date = input
('01'||substr(date,1,3)||substr(date,length(date)-3)
,DATE9.);
答案 1 :(得分:1)
正如@Tom暗示的那样,您必须使用SAS在读取字符日期时可以将其解释为数值的信息。我不确定是否有一个读MONTHYYYY。(当然,ANYDTDTE有效,但我更愿意避免它)。在这种情况下,我会使用MONYYw。,与substr
结合使用得到长度为3个月的缩写和2位数年份:
data have;
input Date $13.;
datalines;
January2005
Feburary2005
March2005
April2005
May2005
June2005
July2005
August2005
September2005
October2005
November2005
December2005
;
run;
data want;
set have;
Date2 = input(SUBSTR(Date,1,3)||SUBSTR(Date,length(date)-1,2),MONYY13.);
Format Date2 DATE8.;
run;
proc print data = want; run;