省略の極み data;set;run; _LAST_

data A;
 X=1;
run;

data;
 set;
 X=X+1;
run;


上記のコードを実行するとどうなるでしょうか?

2ステップ目はdataの後も何もなく、setの後にも何も指定していません。

結果は









こんな感じになります。

dataで何も指定しないと、勝手に連番でDataXXといったデータセットが実行の度に作成されます。

これについては以前、「どうてもいい話 データセット名をかかずに実行」

で触れていました。完全に忘れていましたが、、。

で、今回はsetで何も指定しないとどうなるかという話で、これは

自動的に

set _LAST_;として解釈され、実行されます。

例えばプロシジャの指定で
proc print;
run;

として実行した場合も

proc print data=_LAST_;
run;

と自動で解釈されて実行されます。

で、この_LAST_ってなにって?なると、直前に作成されたデータセットが自動的に指定されます。


なので、最初のコードで、勝手にDATA1とか作るのではなくデータセットAを上書きしたいんだという場合は


data A;
 X=1;
run;

data _LAST_;
 set;
 X=X+1;
run;

とすれば








って感じです。


_LAST_は使いどころ無くはないです。
マクロの中とかで、データセットの作成順に変わる余地がない場合とか?

それでも、あてにしていたステップでデータセットが作成されず、想定外のものを_LAST_で拾ってしまう可能性もあるので、僕はあまり使ったことないですが。





0 件のコメント:

コメントを投稿