小ネタ:なぜこの男らしいコードが通らないのか

人のコード見てて、すごい面白かったのが
以下のコードです。

options nodsnferr;
data all;
set wk1-wk9999999999;
run;

なるほどね。この人は set wk: ;の書き方を知らなかったわけです。
しかしnodsnferrを調べて頑張った。勢いを感じるコードですね

ちなみにnodsnferrについては

http://sas-tumesas.blogspot.jp/2014/03/error-workxxdata-0.html

を参照してください。

その発想は面白いのですが、残念ながらこのコードは実行すると失敗します。

なぜ失敗するでしょうか?また具体的にどう直せばコードとして成立するでしょうか?

正解をいうとですね、
一度実行してみて、エラーメッセージをみるとはっきりします

ERROR: 数字付きデータセットリスト(WORK.wk1-WORK.wk9999999999)の数字が大きすぎます。最大値は2147483647です。

ね。そういうわけなんですよ。

一般的な言語の整数型の範囲は -2,147,483,648 ~ 2,147,483,647( ± 2**31 )ですがその値が、データセットの接尾数値検索の上限値になってるんですね。
(2の31乗なのは2進法で32bitのうち、符号に使う1を引いた数ですね)

なので
set wk1-wk2147483647;とすれば、コードとしては成立します。
しかし注意!!!!!! コロンと違って、ハイフンでつないだ場合、SASがデータセットを順に見ていくのにそれなりに時間かかります。億超えなんて指定した場合は、洒落にならんぐらい時間かかるか、場合によっては落ちます。

なんにでも限界値というものがあるという教訓ですね。

以前このブログで警鐘をならした
「西暦2万1年問題」に通じるものがありますね。
ちなみにこの問題はまだ未解決です。SAS社には早急に対応してほしいですね。
残された時間は、あと1万8千年もないですからね

西暦2万1年問題
http://sas-tumesas.blogspot.jp/2014/11/1.html

0 件のコメント:

コメントを投稿