call symput とexist関数を利用して解決できます。
ここではそれを利用して特定のデータセットの存在を確認し、その結果によって処理を分岐させる処理をしています。
以下のような処理をしています。
1.データセット”ds”が存在しない → データセット”ds”を作成する
2.データセット”ds”が存在する → ログにメッセージを出力する
1.データセットが存在しないとき
data _NULL_; call symput("exist_check", strip(put(exist("ds"),best.))); run; %macro test(); %if &exist_check. = 0 %then %do; data ds; TMP_COLUMN = "N/A"; run; %end; %else %if &exist_check. = 1 %then %do; %put Exist already; %end; %mend; %test();
解説
call symput
データセット”ds”がないとき → マクロ変数 “exist_check” = 0 が入る。
データセット”ds”があるとき → マクロ変数 “exist_check” = 1 が入る。
macro test()
exist_check = 0 のとき → データセット”ds”を作成する。
exist_check = 1 のとき → ログにメッセージ”Exist already”を出力する。
この例ではデータセット”ds”を作成しています。

workに何もない状態からスタートします。
1.の結果

作成されました。

内容もロジックどおりの変数と値が作成されています。
2.データセットが存在するとき
事前にデータセットを作っておきます。
その他は同じです。
data ds;
a = 1;
run;
data _NULL_;
call symput("exist_check", strip(put(exist("ds"),best.)));
run;
%macro test();
%if &exist_check. = 0 %then %do;
data ds;
TMP_COLUMN = "N/A";
run;
%end;
%else %if &exist_check. = 1 %then %do;
%put Exist already;
%end;
%mend;
%test();
この例ではログにメッセージ”Exist already”を出力しています。


事前に作成したデータセットです。
2.の結果

ログに”Exist already”が出力されています。
コメント