%SYSFUNC PATHNAME SAS WORK

WORKライブラリをLIBNAMEで自動的に割り当てる方法を考察【PATHNAME】【%SYSFUNC】

投稿日:2022年4月18日 更新日:

今回は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にしても名前変わっただけで意味ないじゃん。

と思うかもしれませんが、

実作業では意味があります。

例えば、初めからソースコードに「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";

セッションを変えて、前のパスをそのまま使ったために割り当てできませんでした。

そのため、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.";

次にpathname関数を組み込みます。


/* pathname("work") */
%let out_name = %sysfunc(pathname("work"));

libname lib_1 "&out_name.";

このように、pathnameを組み込んでもうまくいきませんでした。


/* pathname("work")_2 */
%let out_name = %sysfunc(pathname("work"));

%put &out_name.;

%putでもworkのパスが出てきてない。

[進展があれば追記]

-%SYSFUNC, PATHNAME, SAS, WORK

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

【SAS】SASで良く使うテクニック。その3 「Ctrl+D」~データセットのオブザベーション数が多いとき~【Excel】

今回はSASで良く使うテクニックということで、データセットのオブザベーション数(行数)が多いときは「Ctrl+D」が役に立つ理由を解説していきます。 (参考:【SAS】SASで良く使うテクニック。その …

【SAS】COALESCEはNULLを数字に置き換える

今回はCOALESCEについて解説します。 /*coalesce 正常形*/ data data1; id=”A”; chiku=1111; output; id=”B”; chiku=2222; o …

【SAS】SAS日時値をyyyymmddhhmmss形式にする。【PUT】【DATETIME】【DATEPART】【TOD】

今回はdatetime関数を使って、SAS日時値を取得した後、yyyymmddhhmmss形式に加工する方法を解説していきます。 (参考PUT:【SAS】PUTはSAS日付値をフォーマットを変換して表 …

【SAS】FORMATプロシージャはフォーマットルールを定義し、値を書き換える。その2

今回もFORMATプロシージャについて解説します。 前回は値の範囲によって、定義されたフォーマットルールに従い、値を書き換えるという内容でした。 【SAS】FORMATプロシージャはフォーマットルール …

【SAS】OUTPUTとDELETEの「明示的な使い方」「暗黙的な使い方」

今回はOUTPUTとDELETEにスポットを当てていきたいと思います。 /* output, delete無し */ data data1; Id1=1111; Char1=”AAAA”; outpu …