📝 前置き
今回はフォーマット(VALUEステートメント)における範囲の指定方法を説明します。
インフォーマット(INVALUEステートメント)では、使用されるケースが少ないので説明は割愛。もし使用する場合は別途SAS社のリファレンスを参照下さい。
あと、ミスしがちな落とし穴についても、最後の方に記事のリンクを載せてるので、そちらも是非参照下さい。
まずは例をご覧ください。
例
*** フォーマットを定義 ;
proc format;
value TEST1_ 1 - 3 = "1~3" other = "その他" ; run; *** フォーマット変換 ; data DT1; length X 8. Y $20.; do X=1 to 5; Y = put(X,TEST1_.); output; end; run;
|
FORMATプロシジャの部分でやっているのは、
proc format;
value TEST1_
1 - 3 = "1~3"
other = "その他"
;
run;
1~3 の値だったら、"1~3" というフォーマットをあて、
それ以外の値だったら、"その他" というフォーマットをあてるように定義しています。
このように範囲に対してフォーマットをあてることができます。
範囲の指定方法は以下のようなものがあります。
指定例 | 意味 | 解説 |
1, 2, 3 | 1 or 2 or 3 | 「,」で区切って含める値を指定 |
1-10 | 1~10 | 「-」で範囲を指定 |
low-10 | 10以下 | 「low」は最小値という意味になる ・数値フォーマットでは「low」に欠損値は含まれない ・文字フォーマットでは「low」に欠損値を含む |
1-high | 1以上 | 「high」は最大値という意味になる |
1-<10 | 1以上,10未満 | 「<」で「未満」や「超」の意味を持たせることができる 例えば、以下のような感じ。 1 -< 10 = "1以上,10未満" 1 <- 10 = "1超,10以下" 1 <-< 10 = "1超,10未満" |
other | その他 | いずれの条件にも一致しない場合のFORMAT値を指定 例えば、フォーマットの指定で、 1 - 3 = "1~3" other = "その他" とすると、1~3以外の値に"その他"を割り当てる また、otherには欠損値も含む。 ただし、以下のように欠損値の定義が既にある場合、otherに欠損値は含まない . = "欠損値" 1 - 3 = "1~3" other = "その他" |
ちなみに、
文字フォーマットにも「"xxx" - "yyy"」みたいな範囲を設定できますが、実際に使用されるケースが少ないため、詳しい挙動説明は割愛します。
もし、使う場合「文字」の範囲である事に気をつけてください。
例えば、以下のように「文字変数に数字が入っていて、それに文字フォーマットを適用する場合」
文字としての範囲「"1"~"100"」には「"1"」「"10"」は当てはまりますが、「"2"」は当てはまりません。
注意事項・落とし穴
*** フォーマットを定義 ; proc format; value $TEST2_ "1" - "100" = "aaa" other = "その他" ; run; *** フォーマット変換 ; data DT1; length X2 Y2 $20.; do X2="1", "2", "10"; Y2 = put(X2,TEST2_.); output; end; run;
|
文字としての範囲「"1"~"100"」には「"1"」「"10"」は当てはまりますが、「"2"」は当てはまりません。
繰り返しになりますが「文字フォーマットは、文字の範囲」であることに注意。
- 文字フォーマットで欠損値を表す場合「" " = "欠損値"」のような指定になります(「""」ではなく「" "」というように間に半角スペースを入れないと欠損値の意味にならない)
- FORMATの落とし穴【デフォルト長】
- FORMATの落とし穴【数値フォーマット】
0 件のコメント:
コメントを投稿