西暦2万1年問題

さて、普段は知ってても知らなくても、どーでもいいようなことばっかり書いているこのブログですが、今回ばかりは全てのSASプログラマーにとって極めて深刻な問題について取り上げます。
姿勢を正して、真剣に読んでください。

data A1;
X=mdy(1,1,20000);
Y=mdy(1,1,20001);
format X WORDDATE32.;
run;

をやると結果はどうなるでしょう?

mdy関数を知らない方は、SAS忘備録の記事
「日付値を簡単に作るMDY関数の紹介」
をよんでください

WORDDATEフォーマットは
「 January 1 2014」みたいな形式です。

ただ、mdy関数もフォーマットも、この深刻な問題の根本にはあまり関係ないです。


結果は






です。

関数の指定は何も間違っていないのに、何故欠損なのか?

実はSASは日付として、西暦2万年12月31日にあたる範囲までしか、サポートしてないからです。
2万1年目はないんです。

今後、現在のバージョンのSASで作られたシステムを使い続けると、西暦2万1年の1月1日を
迎えた途端、全てのSASのtoday関数などが欠損になります。
それによって世界が大混乱するわけですね。

これがSASの西暦2万1年問題です。

today関数が欠損を返しても、ミサイルとか発射されないように、エラー分岐に気を付けてください。


やっぱり、どーでもよかった



0 件のコメント:

コメントを投稿