将字符日期变量转换为SAS日期

时间:2015-09-17 04:44:56

标签: date sas character numeric

我在excel文件中有以下名为Date的变量,我正在读到SAS:

Date
May2005
June2005
July2005
..
July2015

格式和信息都是字符($ 8)

我想将这些转换为SAS Date变量。 我怎样才能完成这项任务?

我想过使用substr来创建一个月份和年份变量, 然后使用proc格式将所有月份转换为数字(例如'jan'= 1)。 使用mdy日期函数创建新日期。但我想知道是否有更短的方法来完成这项任务?

2 个答案:

答案 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;