以下のようにフォーマットを定義したとします。
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」という名前で保存されます。
例えば、以下のプログラムで「TEST1_」というフォーマットを使用しています。
data DT1;
format X TEST1_.; X = 1; run; |
まずSASは、この「TEST1_」をフォーマットカタログから探しにいきます。
デフォルトでは、「WORK.FORMATS」→「LIBRARY.FORMATS」の順に探しに行きます。
「WORK.FORMATS」の次に検索される「LIBRARY.FORMATS」はSASが決めたやつで、
LIBNAME LIBRARY "フォーマットカタログを保存したパス";
|
と書けば、このパスに格納されている「FORMATS」と名の付いたカタログが検索されるようになります。
「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
2. INVALUEステートメント
3. 範囲の指定
0 件のコメント:
コメントを投稿