カタログおよびカタログに含まれるエントリの存在チェック

[OS] ALL
[リリース] ALL
[キーワード] Base, DATA, catalog, entry, exist, check, CEXIST

[質問]

カタログやエントリが存在するかどうか確認する方法はありますか。

[回答]

CEXIST関数を使って、カタログやエントリの存在チェックを行なえます。

CEXIST関数の書式:


   rc = CEXIST(エントリ,<'U'>)

引数と戻り値の説明:

引数 エントリ(カタログ)名 1レベルか2レベルの名前を指定した場合はカタログの存在チェック、3レベルか4レベルの名前を指定した場合はカタログエントリの存在チェックになります。
'U' 更新オープンできるかどうかの確認を行ないます。
'U'を指定した場合は、エントリが存在して、かつ更新オープンできる場合に戻り値に1がセットされます。
戻り値 rc 1: カタログもしくはカタログエントリが存在する
0: カタログもしくはカタログエントリが存在しない

使用例1:WORK.FORMATSカタログにVOTEFというフォーマットが存在するかチェックする


   data _null_;
     if cexist('work.formats.votef.format') then
       call symput('c_exist','Y');
     else
       call symput('c_exist','N');
   run;

   %put &c_exist; 

使用例2:WORK.GSEGカタログが存在するかチェックして、存在する場合は、カタログに含まれる全てのエントリを削除する


   %macro del_gseg(cat_name);
     %*** cat_name --- カタログ名 ***;
     %if %sysfunc(CEXIST(&cat_name)) = 1 %then %do;
       proc catalog c=gseg kill force;
       run;
       quit;
     %end;
   %mend del_gseg;

   %del_gseg(work.gseg)               /* マクロの実行 */