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
*/