1

我怎样才能转换这样的东西:

2006 年 1 月 1 日晚上 11:00

进入这个:

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;

谢谢你的帮助。

4

3 回答 3

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;

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

于 2012-12-03T14:35:13.317 回答
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
于 2012-12-03T09:03:21.777 回答
0

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

datetime=dhms(date,0,0,time);
于 2012-12-03T09:04:15.837 回答