データセットの存在を確認する

スポンサーリンク

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

コメント