2014年8月25日月曜日

ライブラリをいっぺんに取り消す方法



1つまたはすべてのライブラリを取り消す方法を紹介します。



① LIBNAMEステートメント


ライブラリを取り消す構文
LIBNAME ライブラリ参照名 CLEAR;

    すべてのライブラリを取り消す構文
    LIBNAME _ALL_ CLEAR;


      * 適当にライブラリを割り当て ;
      libname test1 "適当なパス1";
      libname test2 "適当なパス2";

      * ライブラリ「TEST2」のみ取り消す ;
      libname test2 clear;




      ② LIBNAME関数


      データステップ内でもLIBNAME関数でライブラリの取り消しが出来ます。


      ライブラリを取り消す構文
      リターンコードを格納する変数 = LIBNAME( "ライブラリ参照名" );

        • 取り消しが成功したか失敗したか、などの情報はログに表示してくれません。
        • その代わり、LIBNAME関数のリターンコードには以下が格納される。
          • 取り消せた場合「0」
          • なんらかのERROR、WARNINGなど特記事項がある場合は「0以外」(特記事項はSYSMSGという関数で取得できる)


        * 適当にライブラリを割り当て ;
        libname test1 "適当なパス1";
        libname test2 "適当なパス2";

        * ライブラリ「TEST1」「TEST2」を取り消す ;
        data _null_;
                length msg $2000.;

                rc = libname( "test1" );
                if rc^=0 then do;
                   msg=sysmsg();
                   put msg;
                end;

                rc = libname( "test2" );
                if rc^=0 then do;
                   msg=sysmsg();
                   put msg;
                end;
        run;



        以下のようにDOループなどを使ってドカッと取り消したり、色々工夫の余地があります。

        * 適当にライブラリを割り当て ;
        libname test1 "適当なパス1";
        libname test2 "適当なパス2";
        libname test3 "適当なパス3";

        * ライブラリ「TEST1」~「TEST3」を取り消し ;
        data _null_;
              length msg $2000.;
              do i = 1 to 3;
                   rc = libname( cats( "test", i ) );
                   if rc^=0 then do;
                       msg=sysmsg();
                       put msg;
                   end;
              end;
        run;

        上の例を簡単に説明しておくと、
        • DOループで変数 i の値を1~3まで変化させながら、
        • CATS関数で "test" という文字と変数 i の値を結合します。
        • その結合した文字が表すライブラリ参照をLIBNAME関数で取り消しています。


        0 件のコメント:

        コメントを投稿