PROC DELETEの注意点
SAS9.4から追加された機能でproc deleteというプロシージャがあります。
Technical Support:データセットの削除
https://go.documentation.sas.com/?docsetId=proc&docsetTarget=n1469bsvzgd33jn0z4xecxmx2bgo.htm&docsetVersion=9.4&locale=ja
単純にデータセットを削除するだけなら、proc datasetsよりも早い(らしい by 公式ドキュメント)ですし、nolistとかいらん記述をしなくていい、というメリットもあります。
が、存在しないデータセットを指定すると、警告が出てしまう上にnowarnオプションが実装されていないために消すことができません。
これは正直しんどい。
ところで、proc deleteにはlibraryとdataを指定できますが、省略した場合はどうなるのでしょう。
libraryを省略した場合はdata=で指定したデータセットが2レベル(ライブラリ参照名.データセット名)の場合は、データセットのライブラリが優先され、1レベル(データセット名)の場合はlibrary=で指定したライブラリが適用されます。
proc delete lib=sasuser data=work.xxxxx xxxxx; run;
↓
では、dataを省略した場合はどうなるのでしょう。ドキュメントではlibraryを省略した場合はworkとして処理されるという事が書いてありますが、dataを省略した場合については記載がありません。
data a; a=1; run; data b; a=1; run; proc delete; run;
実行してみると、以下のログがでました。
どうやらSASLAST自動マクロ変数を利用しているっぽいです。
SYSLAST自動マクロ変数
例えば以下のコードでも
data b; a=1; run; data temp.b; a=1; run; proc delete lib=work; run;
となり、lib指定を無視してきちんとSASLAST自動マクロ変数のtemp.bを削除しています。
まぁ、なんとなく予想通りですね。proc print;と同じ
なお、data=にはX1-X5のようなリスト形式で指定できるものの、datasetsプロシージャにおける「lib=work kill」のようなライブラリ内の全データセットを削除するという指定はできないようですので、まだまだproc datasetsからは離れられなさそうです。