フォーマットの注意
 フォーマットをあてた変数をテーブルで見るとフォーマットをあてた後の値で表示されるが、
データを加工しようとするとフォーマットをあてる前の値になっていることが分かる。
 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.