2014年10月1日水曜日

ライブラリをいっぺんに割り当てる方法




ライブラリをいっぺんに取り消す方法とは逆に、いっぺんに割り当てる方法を紹介。


たとえば、「C:\TEST」というパスに 「A」「B」「C」というフォルダがあったとします。
これらにライブラリを割り当てたいとします。



① LIBNAMEステートメント


ライブラリを割り当てる構文
LIBNAME ライブラリ参照名 "割り当てるパス";

* ライブラリを割り当て ;
libname mylib1 "C:\TEST\A";
libname mylib2 "C:\TEST\B";
libname mylib3 "C:\TEST\C";



② LIBNAME関数


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


ライブラリを割り当てる構文
リターンコードを格納する変数 = LIBNAME( "ライブラリ参照名", "割り当てるパス" );

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


    * ライブラリを割り当てる ;
    data _null_;
            length msg $2000.;

            rc = libname( "mylib1", "C:\TEST\A" );
            if rc^=0 then do;
               msg=sysmsg();
               put msg;
            end;
            rc = libname( "mylib2", "C:\TEST\B" );
            if rc^=0 then do;
               msg=sysmsg();
               put msg;
            end;
            rc = libname( "mylib3", "C:\TEST\C" );
            if rc^=0 then do;
               msg=sysmsg();
               put msg;
            end;
    run;



    以下のようにDOループなどを使っていっぺんに割り当てたり、色々工夫の余地があります。

    * ライブラリを割り当てる ;
    data _null_;
          length x msg $2000.;
          do  x = "A", "B", "C";
               i + 1;
               rc = libname( cats( "mylib", i ) , cats( "C:\TEST\", x ) );
               if rc^=0 then do;
                   msg=sysmsg();
                   put msg;
               end;
          end;
    run;




    0 件のコメント:

    コメントを投稿