以下のようにフォーマットを定義したとします。
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つの方法があります。
例えば、以下のプログラムで「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は使用したことないので詳細不明。詳しくはリファレンスを参照下さい)