フォーマットの中にフォーマットを指定することができる面白い小技。
サンプルデータ作成
proc format ; value SEX_ 1 = "男性" 2 = "女性" ; run; data DT1; format V1 SEX_. ; V1 = 1; output ; V1 = 2; output ; V1 = .; output ; run; |
変数「V1」にフォーマット「SEX_」を割り当てています。
小技使用例
上のサンプルで例えば、、「V1」がNULLなら ”未記載” と表示したいとする。
その場合、”未記載”を含めた新たなフォーマットを作成するため、、
proc format ; value SEX2_ 1 = "男性" 2 = "女性" . = "未記載" ; run; |
と書くけど、以下のようにも書ける。
proc format ; value SEX2_ . = "未記載" other = [SEX_.] ; run; |
解説と注意点
上記例では、フォーマット「SEX2_」を作成し、
NULLの場合、”未記載”と表示させ、
それ以外は、フォーマット「SEX_」の内容を適用させてる。
注意点としては、ログに以下のようなメッセージがでる。
NOTE: SEX_入出力形式が等号(=)の右側に指定されましたが、 長さの指定がありません。 PROC FORMATは生成される入出力形式の標準の長さを40と仮定しました。 十分な長さでない場合は、SEX_入出力形式に長さを指定し、 PROC FORMATを再実行するか、 十分なDEFAULT=オプションを指定してください。 |
ざっくり言うと、
”「SEX2_」から「SEX_」を参照する時は表示する文字の長さを「40」で切るね。”
と言ってます。
今回「SEX_」は”男性”と”女性”で文字の最大長さは40以下なので、支障がないから上記メッセージは無視して構わない。
もし長さが40を超える場合や、上記のメッセージが嫌という場合は、
以下のように、フォーマット名の末尾に、十分な長さの指定を加えればよい。
proc format; value SEX2_ . = "未記載" other = [SEX_10.] ; run; |
0 件のコメント:
コメントを投稿