我輩はブロガーではない。ネタもまだない

SASとかDelphiあたりの人様の役に立たないネタを提供します

SAS XPTビューワを更新しました(v0.1.2.0)

対応フォーマットを修正、追加しました。

  • 修正:TOD, TIME, DDMMYY, MMDDYY, E8601TM
  • 追加:DATE

バージョンは0.1.2.0です。
こちらからどうぞ
https://bitbucket.org/t_kawakami/xptviewer-for-public/src/main/

以下は修正時の小話です


手でポチポチするのは面倒なので、ユニットテストのプロジェクトを作成したところ、検証時間が激減しました。
そして、随分SASのフォーマット結果と違っていましたのでたくさん修正しました。

例えば

  • options decimalconv=stdieeeを指定していると四捨五入が銀行丸めになる

オプションをビューワで指定できるといいかもしれないすね。

options decimalconv=COMPATIBLE;
data _null_;
  a=0.25;
  put a=3.1;
  a=0.35;
  put a=3.1;
run;

options decimalconv=stdieee;
data _null_;
  a=0.25;
  put a=3.1;
  a=0.35;
  put a=3.1;
run;

結果はこうです

f:id:japelin:20211008033740p:plain
デフォルトの場合は一般的な四捨五入が行われ、STDIEEEの場合は偶数に近い方へ丸められている(銀行丸めと呼ばれる)
  • TOD、TIMEは小数点以下「のみ」四捨五入する
data _null_;
  a=0.25;
  put a=time12.2;
  put a=time12.1;
  a=80036;
  put a=time8.;
  put a=time5.;
run;
f:id:japelin:20211008034321p:plain
小数点以下については四捨五入されているが、秒は切り捨てられる
  • TODは0-24時までしか対応しない(マイナスもしくは24時を超える場合は、24時間表記に直される)
  • E8601TMも0-24時までしか対応しない(マイナスもしくは24時を超える場合は、表現不可:*****となる)
data _null_;
  a=-80000.;
  put a=time9.;
  put a=tod8.;
  put a=E8601TM8.;
run;
f:id:japelin:20211008034730p:plain
TIMEはマイナス表記可能、TODは24時間に直され、E8601TMでは表記できない
  • DDMMYYは6桁以下の場合、年月ではなく、先頭から残していく

てっきり年>月>日の順で残るのかと思ってました。(YYMMDD脳)

data _null_;
  a=10000;
  put a=mmddyy10.;
  put a=mmddyy5.;
  put a=mmddyy2.;
run;
f:id:japelin:20211008035029p:plain
先頭から残していく