今回はWORKライブラリをLIBNAMEで自動的に割り当てる方法を考察していきたいと思います。
workライブラリはlibnameを使ってlib_1のようにライブラリ名を割り当てる事ができます。
/* 正常形1 */
libname lib_1 "/saswork/SAS_work9DFE0001D31B_odaws01-apse1.oda.sas.com/SAS_work1E250001D31B_odaws01-apse1.oda.sas.com";

- workライブラリをlib_1としてライブラリ割り当てをすることができる。(参考:【SAS】LIBNAMEはディレクトリパスをライブラリに割り当てる | ビジネスイッチ (how-to-business.com))
ライブラリworkをわざわざlib_1にしても名前変わっただけで意味ないじゃん。
と思うかもしれませんが、
実作業では意味があります。
例えば、初めからソースコードに「lib_1」が多数使われていたとします。
“一時的に”改修をするためにworkライブラリ内に出力先を変えたいとします。
その場合、通常であれば
- 「lib_1」を「work」に全て置換する。
- 「lib_1」という文言を全て取り去る。
どちらかの方法で出力先をworkライブラリに設定することができます。
しかし、改修後に「lib_1」をソース内にもたらしたい時は、該当箇所に「lib_1」を全て書き換えなければいけません。(全てworkになっているなら、work→lib_1に置換すれば良いですが、、、)
こういった面倒を避けるために、最初に行った「workをlib_1にライブラリ名割り当て」を使います。
しかし、ネックがあって、セッションが変わるごとにworkのパスは変化します。
/* 正常形1古い奴 */
libname lib_1 "/saswork/SAS_work9DFE0001D31B_odaws01-apse1.oda.sas.com/SAS_work1E250001D31B_odaws01-apse1.oda.sas.com";

- workライブラリをlib_1としてライブラリ割り当てできてない。(参考:【SAS】LIBNAMEはディレクトリパスをライブラリに割り当てる | ビジネスイッチ (how-to-business.com))
- セッションが変わると、workのパスは変わる。
そのため、EG画面を閉じて、再び開いたときにはworkのプロパティを開いて、パスを張り付ける必要があります。
これをセッションが切れる度に行うことになります。
これは手間なので関数を使ってworkのパスを自動取得することによって、この手間を省きたいと思います。
ちなみに結論から言うと、うまくいきませんでした。
libnameにマクロ変数が使用できることを確認します。
/* 正常形2 */
%let out_name = /saswork/SAS_workB54C0000A4A2_odaws02-apse1.oda.sas.com/SAS_work6CB30000A4A2_odaws02-apse1.oda.sas.com;
libname lib_1 "&out_name.";

- workライブラリをlib_1としてライブラリ割り当てをすることができる。(参考:【SAS】LIBNAMEはディレクトリパスをライブラリに割り当てる | ビジネスイッチ (how-to-business.com))
- libnameにマクロ変数を用いることもできる。(参考:
次にpathname関数を組み込みます。
/* pathname("work") */
%let out_name = %sysfunc(pathname("work"));
libname lib_1 "&out_name.";

- workライブラリをlib_1としてライブラリ割り当てできてない。(参考:【SAS】LIBNAMEはディレクトリパスをライブラリに割り当てる | ビジネスイッチ (how-to-business.com))
- pathnameによりライブラリworkのディレクトリパスを代入したい。(参考:【SAS】PATHNAME関数はライブラリのディレクトリパスを返す | ビジネスイッチ (how-to-business.com))
- テキトーなライブラリを割り当てている(?)
このように、pathnameを組み込んでもうまくいきませんでした。
/* pathname("work")_2 */
%let out_name = %sysfunc(pathname("work"));
%put &out_name.;

- pathnameによりライブラリworkのディレクトリパスを代入したい。(参考:【SAS】PATHNAME関数はライブラリのディレクトリパスを返す | ビジネスイッチ (how-to-business.com))
- %letでマクロ変数out_nameに代入している。(参考:)
- %putでログに出力したい。(参考:【SAS】%PUTステートメントは文字列をログに出力する。その1 | ビジネスイッチ (how-to-business.com))
%putでもworkのパスが出てきてない。
[進展があれば追記]
