1

次のように変換するにはどうすればよいですか。

2006 年 1 月 1 日 午後 11 時

これに:

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

最も簡単な方法は、テキストの代わりに日付と時刻の情報を使用して日付と時刻を読み取ることだと思います。次に、DHMS関数を使用して日時列を作成し、必要な形式を適用できます。

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

おそらくもっとエレガントな方法がありますが、ここに1つのオプションがあります。

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 に答える