日時データ

Last-modified: 2014-05-30 (金) 01:16:43

unixタイムとsas日付時間との変換

unixタイムは、1970年1月1日0時0分0秒からの累積秒数で日時を表しているのに対し、
sas日付時間(ほかにもsas日付とsas時間が別にあることの注意)では、1960年1月1日0時0分0秒からの累積秒数で日時を表している。
よって、この10年分の秒数(315,619,200秒)を足し引きすれば、互いに変換することができる。

data _null_;
  unix0='01jan1970:00:00:00am'dt;
  sas0='01jan1960:00:00:00am'dt;
  d=unix0-sas0;
  put d;
run;

/*
315619200
*/

hourフォーマットとhour関数の端数処理の違い

hourフォーマットは,時間データを時間単位で表し,その小数点以下を指定桁数に合わせて四捨五入される.一方,hour関数は,時間部分を取り出して返すので,小数部分をもたない.そのため,以下の様な違いが生じる.

data;
time='8:45't;
hour=hour(time);
put time= hour.;
put time= hour5.2;
put hour=;
run;
/*
SAS時間のHourフォーマットは四捨五入,Hour関数は切り捨て.

time=9
time=8.75
hour=8
*/