在SAS中转换日期时间格式

时间:2012-12-03 05:03:56

标签: sas

我如何转换这样的内容:

  

1January2006 11:00 PM

进入这个:

  

1JAN06:23:00:00

目前,我已从txt导入日期并将日期和时间合并在一起:

data date_time;
infile 'X:\date_time.txt' dlm=',' ;
length date $20;
input news $  time $ date  $ words $;
datetime =date || time;
run;

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

处理凌乱的数据可能会非常棘手。在这种情况下,您需要将传入的文本字符串分解为多个部分,然后将这些部分转换为日期时间值。这是一个应该有用的例子:

data want;
  input @1 date_string $23.;

  length DatePart $15 TimePart $7 DayMonthPart $5 YearPart $4;
  drop DatePart TimePart DayMonthPart YearPart;

  format DT datetime.;

  DatePart = scan(date_string,1);
  TimePart = scan(date_string,2);

  YearPart = substr(DatePart,length(DatePart) - 3);
  if notalpha(DatePart,2) = 2  /* Second character is a digit */
     then DayMonthPart =        substr(DatePart,1,5);
     else DayMonthPart = '0' || substr(DatePart,1,4);

  DT = input(DayMonthPart || YearPart || ' ' || TimePart,datetime.);

  put date_string= / DT= /;

  datalines;
30september2012 11:00PM
1january2012 11:00PM
31january2012 11:00PM
1july2012 11:00AM
30july2012 1:00AM
run;

上面的代码是故意详细的,所以你可以看到它是如何工作的。

答案 1 :(得分:0)

虽然可能有更优雅的方式,但这里有一个选项:

data test;
  length dt $30;
  dt="1January2006 11:00PM";
  if length(dt)=20 then dt="0"||dt;
  date_num=input(substr(scan(dt,1),1,5)||compress(substr(scan(dt,1),3),,'kd'),date9.);
  time_num=input(scan(dt,2),time.);
  dt_num=dhms(date_num,hour(time_num),minute(time_num),0);
  put dt_num datetime.;
run;

日志输出给出:

01JAN06:23:00:00

答案 2 :(得分:0)

我认为您最简单的方法是使用日期和时间信息而不是文本来阅读日期和时间。然后,您可以使用DHMS功能创建日期时间列并应用所需的格式。

datetime=dhms(date,0,0,time);