2018年1月23日火曜日

PROC FORMAT入門3 : 範囲の指定




📝 前置き

今回はフォーマット(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;
  X   Y 
  1  1~3 
  2  1~3
  3 1~3
  4 その他  
  5 その他



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"」みたいな範囲を設定できますが、実際に使用されるケースが少ないため、詳しい挙動説明は割愛します。
もし、使う場合「文字」の範囲である事に気をつけてください。
例えば、以下のように「文字変数に数字が入っていて、それに文字フォーマットを適用する場合」

*** フォーマットを定義 ;
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;
 X2  Y2 
  1  aaa 
  2  その他 
  10 aaa

文字としての範囲「"1"~"100"」には「"1"」「"10"」は当てはまりますが、「"2"」は当てはまりません。
繰り返しになりますが「文字フォーマットは、文字の範囲」であることに注意。




注意事項・落とし穴

0 件のコメント:

コメントを投稿