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”が出力されています。
 
  
  
  
  
コメント