データセットの存在判定

[OS]ALL
[リリース] 6.12, 8.1, 8.2
[キーワード] EXIST, %SYSFUNC, SCL

[質問]

WORKライブラリの中に「Data1」というデータセットがあるかどうかを調べて、分岐処理を行ないたいのですが、どのようにしたらよいのでしょうか。

[回答]

データセットが存在するかどうかを判定するには、SCL関数であるEXIST関数を使用します。 EXIST関数は、指定のデータセットが存在すればリターンコード「1」、存在しなければリターンコード「0」を返します。ただし、この関数はSCLプログラムの外では使用できないため、マクロ関数%SYSFUNCを使って呼び出します。

次のサンプルプログラムは、データセットが存在する場合にPRINTプロシジャを実行し、存在しなければ「データセット XX は存在しません」というメッセージをログに出力します。

/** テストデータの作成 **/
DATA data1;
  a=1;
RUN;

/** データセットの存在を判定するマクロ **/  
%MACRO exist(lib,dsn);
  %IF %SYSFUNC(EXIST(&lib..&dsn)) %THEN
  %DO;
    PROC PRINT DATA=&lib..&dsn;
    RUN;
  %END;
  %ELSE %PUT ** データセット &dsn は存在しません **;
%MEND;

/** パラメータを指定してマクロを実行 **/

%exist(work,data1); /* 1番目はライブラリ名 */
                    /* 2番目はデータセット名 */

実行結果

  • データセットwork.data1が存在する場合
    PRINTプロシジャが実行されます。

  • データセットwork.data1が存在しない場合
    ログウィンドウに「** データセット data1 は存在しません **」というメッセージが出力されます。