TODフォーマットと注意点
todフォーマット、最近ではご存知方も多いと思います。
documentation.sas.com
9時20分36秒をtime8.フォーマットで表すと
「9:20:36」
となります。
これをtod8.フォーマットを使えば、先頭に0が埋められ、
「09:20:36」
となり、2桁時刻との桁の誤差が生じなくなります。
桁の誤差があると見づらくなるので、ログ出力等では大助かりです。
一方で、マイナスや24時間以上の時間の場合は注意が必要です。
timeフォーマットでは、マイナスも24時間以上もそのまま表記できますが、
todフォーマットでは、0-24時間に調整して表現されます。
プログラムとともに具体例を見ていきます。
data _null_; a='30:25:41't; put a=time8.; put a=tod8.; run;
例えば、上記のプログラムの結果はこうなります。
マイナスについても
data _null_; a='-3:25:41't; put a=time8.; put a=tod8.; run;
結果はこうなります。
(前回に引き続き)仕様のバグなのか、浮動小数点処理の誤差によるものなのか、マイナス小数の桁が大きな時はより注意が必要です。
こんなコードを用意しました。
data _null_; a=-0.123456789; put a=time20.10; put a=tod20.10; run;
実行した結果は以下のようになります。
-0.123456789
なので、todフォーマットの結果は23:59:59.8765432110
となってほしいところです。
期待通りの結果としたい場合は、以下のように書きます。
data _null_; a=-0.123456789; put a=tod20.10; a='24:00:00't+a; put a=tod20.10; run;
1日を足して、正の小数になおしてあげる、ということですね。