人のコード見てて、すごい面白かったのが
以下のコードです。
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 件のコメント:
コメントを投稿