フォーマットの注意
フォーマットをあてた変数をテーブルで見るとフォーマットをあてた後の値で表示されるが、
データを加工しようとするとフォーマットをあてる前の値になっていることが分かる。
SAS内部でデータの持ち方がそのようになっているかららしいが、詳細は分からない。
加工の際は注意が必要。
フォーマットをあてた値を、別の変数で作るには↓こんなのがあった気がする。
(新たに作る変数名)=put((フォーマットをあてる変数名),(フォーマット名).);
念のため。
最後のピリオドは自分で作成したフォーマットについては必要だが、
SASが予め持っているdollar10.2などの場合は不要である)
(
文字型の数字を数値型に変える
に関連の記載あり)
フォーマット名は8文字までで、語尾が数字だとエラーになる。
また、FORMATプロシジャを使うことでデータセットにある変数の順序を設定することができる。
変数の順序を変えるのは、LENGTHでも可能だ。
これによって変数の型を変更することもできるだろう。
また、datasetsプロシジャを使って、あてられたフォーマットを全て外すことも可能らしい。
会社のKさんから聞いた。
↓こんなんらしい。
proc datasets lib=(ライブラリ名);
modify (データセット名);
format _all_;
quit;
似たようなもので、↓こんなんもあるらしい。
「_character_」全文字変数
「_numeric_」全数値変数
追伸
Kさんありがとうございます。
V8ではフォーマットが8文字、インフォーマットが8文字までだったが、 V9ではフォーマットが32文字、インフォーマットが31文字までとなった。
文字フォーマットの場合は先頭に「$」が必須なため、1文字分自由度が減る。
フォーマットをライブラリに保存する場合は以下のようにする。
PROC FORMAT LIBRARY=LIBRARY;
〜
RUN;
ライブラリの指定は「LIBRARY」でないといけない。
SASのデフォルトの設定でフォーマットのカタログを
WORKとLIBRARYからしか読み込まないようにしているためである。
変更するにはOPTIONのFMTSEARCHを使う必要がある。
(080222追記)
WINDOWSとUNIXでは、データセットを移管することができてもフォーマットカタログは移管することができない。
(31JAN2009追記)
DATAステップ等でformatが無いというエラーを避けたい場合は、
option nofmterr ;
とすることでエラーとしての扱いではなくなる。
31JAN2009 update.