2018年4月17日火曜日

PROC FORMAT入門7 : フォーマットカタログの保存




以下のようにフォーマットを定義したとします。

proc format;

   value TEST1_
       1 = "MALE"
       2 = "FEMALE"
   ;
   invalue TEST2_
       "M" = 1
       "F" = 2
   ;
run;


定義したフォーマットはライブラリ「WORK」に「FORMATS」という名前で格納されます。
この「WORK.FORMATS」を「SASカタログ(或いはフォーマットカタログ)」といいます。

WORKに格納されるので、通常はSAS終了とともに削除されます。




フォーマットカタログの保存


WORK以外の場所にフォーマットカタログを保存したい場合は「LIBRARY=オプション」を指定します。

PROC FORMAT  LIBRARY = ライブラリ.カタログ名;
      ~ フォーマット定義 ~
RUN;


例)
library = MYLIB.FORMATS ……「MYLIB.FORMATS」で保存
library = MYLIB.MYFMT      ……「MYLIB.MYFMT」で保存
library = MYLIB                   ……「MYLIB.FORMATS」で保存

※3つ目の例のようにカタログ名を省略すると「FORMATS」という名前で保存されます。



ここまでで、フォーマットカタログを保存する方法は分かりましたが、
WORK以外に保存したフォーマットカタログはそのままでは利用できません。利用するには以下2つの方法があります。




① ライブラリ参照「LIBRARY」を利用する


例えば、以下のプログラムで「TEST1_」というフォーマットを使用しています。

data DT1;
   format X TEST1_.;
   X = 1;
run;



まずSASは、この「TEST1_」をフォーマットカタログから探しにいきます。
デフォルトでは、「WORK.FORMATS」→「LIBRARY.FORMATS」の順に探しに行きます。



「WORK.FORMATS」の次に検索される「LIBRARY.FORMATS」はSASが決めたやつで、

LIBNAME LIBRARY  "フォーマットカタログを保存したパス";

と書けば、このパスに格納されている「FORMATS」と名の付いたカタログが検索されるようになります。




② 「OPTIONS FMTSEARCH」 を利用する


「FMTSEARCH」システムオプションでは、参照するフォーマットカタログと、参照する順番を指定できます。

OPTIONS FMTSEARCH = (  参照する順にフォーマットカタログを列挙  )


例) options fmtsearch=( TEST.MYFMT );

「WORK.FORMATS」→「LIBRARY.FORMATS」→「TEST.MYFMT」の順に検索。
(「WORK.FORMATS」と「LIBRARY.FORMATS」は強制的に最初に検索される。)


例) options fmtsearch=( TEST );

「WORK.FORMATS」→「LIBRARY.FORMATS」→「TEST.FORMATS」の順に検索。
(「TEST」というように、ライブラリ名しか指定しない場合、「ライブラリ.FORMATS」が検索される)


例) options fmtsearch=( TEST WORK );

「LIBRARY.FORMATS」→「TEST .FORMATS」→「WORK.FORMATS」の順に検索。
(「WORK.FORMATS」または「LIBRARY.FORMATS」の検索順を明示的に指定して変えることができる)



ちなみに、FMTSERACH=システムオプションは「CASサーバーでのフォーマットライブラリの検索順には適用されない」とのこと(CASは使用したことないので詳細不明。詳しくはリファレンスを参照下さい)


長い説明になりましたが、データステップ100万回のSASYAMAさんの記事もあわせて参照下さい。(やっぱSASYAMAさんの記事分かり易い、説明うまいなぁ)
http://sas-tumesas.blogspot.jp/2013/12/libraryfmtsearch.html




PROC FORMAT入門 : 記事一覧

2. INVALUEステートメント
3. 範囲の指定

0 件のコメント:

コメントを投稿