別のオプション空間を作ってSASを実行する話。個人的には微妙な仕様だけども

sasのオプションはoptionsステートメントで定義できます。
これはいわゆるグローバルな定義で、一旦設定をいじると、それ以降ずっとそのオプションが
反映されます。

options missing = - ;
とすれば数字欠損値の表示がハイフンになり、
options obs=1;とすると、1オブザベーションしか読み込まれなくなります。

よくある失敗として、そのオプションを適用したい部分が終わっても、元に戻すoptionsステートメント
を書き忘れて、それ以降の処理に全部適用されちゃったってパターンがあります。

処理が終わったらかならず、

options missing = . obs=max;

などとして、戻してやらなければいけません

まあ、この程度のオプションならいいですが、非常に込み入った設定をごく一部の処理にだけ
適用したい場合、戻すのも面倒なんですね。

それをパパっとやりたい、そんなあなたに朗報!

以下のコードを実行してみます

data a;
x=.;output;
x=1;output;
x=2;output;
run;

proc lua restart;
 submit;
 sas.submit[[
 title "Luaのsas.submitの中①";
 options missing=- obs=1;
 proc print data=a;
 run;
 ]]
 endsubmit;
run;

 title "普通のsas";
 proc print data=a;
 run;

 proc lua;
 submit;
 sas.submit[[
 title "Luaのsas.submitの中②";
 proc print data=a;
 run;
 ]]
 endsubmit;
run;

 proc lua restart;
 submit;
 sas.submit[[
 title "restartしてリセットされたLuaのsas.submitの中";
 proc print data=a;
 run;
 ]]
 endsubmit;
run;











































と、luaのsas.submitの中で定義したオプションが
その中でのみ働いていることがわかります。

便利ですね。proc luaの使い道の一つかも知れません。


でも個人的には
う~ん、この仕様、正直いいんだか悪いんだか、ちょっと僕には微妙です。
ちょっとしたときにはいいけど、オプション空間が2つあるのは混乱を招くような気も…
ちなみにLuaのSAS.submit内のoptionは、最初に実行した際のグローバルの設定がベースになりますからね。

SAS.submit内でoptionを設定した場合と、Luaのsas.submit初回実行後にsasの方でoptionいじったときに初めて、環境がズレていくわけです。


0 件のコメント:

コメントを投稿