2015年10月22日木曜日

順位をつけるRANKプロシジャと、TIESオプションによる同値の扱い【まとめ】





変数値の小さい順に、順位を与える事ができます。



構文

PROC  RANK   DATA = 読込データ  OUT = 出力データ  TIES = タイ値の扱い ;
      VAR          順位を見る変数 ;
      RANKS     順位を格納する変数 ;
RUN ;



注意点


  • 欠損値には順位がつかない。
  • RANKSを指定しないと、VARの変数に順位が格納される(上書きされる)。
  • 同値があった場合の取り扱いを、TIESオプションで設定。
  • 以下で紹介されている「浮動小数点の誤差」ってやつで微妙に値が異なっていると、別々の順位が割り当てられるのでご注意ください。


具体例


サンプルデータ
data DT1;
input A @@;
cards;
10 10 21 30
;
  A  
  10  
  10
  21
  30


TIESオプションの設定別
proc rank data=DT1 out=OUT1 ties=low;
   var A;
   ranks A2;
run;
  A  
  A2  
  10    1  
  10  1
  21  3
  30  4

1位と2位が同値なので、最小の1位が入る。
次の値が3位


proc rank data=DT1 out=OUT2 ties=high;
   var A;
   ranks A2;
run;
  A  
  A2  
  10    2  
  10  2
  21  3
  30  4

1位と2位が同値なので、最大の2位が入る。
次の値が3位


proc rank data=DT1 out=OUT3 ties=mean;
   var A;
   ranks A2;
run;
  A  
  A2  
  10    1.5  
  10  1.5
  21  3
  30  4

1位と2位が同値なので、平均の1.5位が入る。
次の値が3位


proc rank data=DT1 out=OUT4 ties=dense;
   var A;
   ranks A2;
run;
  A  
  A2  
  10    1  
  10  1
  21  2
  30  3

1位と2位が同値なので、1位が入る。
次の値が2位になる。



ちなみに、値が大きい順に順位をつけたい場合は、descendingオプションをつけます。

proc rank data=DT1 out=OUT5 ties=dense descending;
   var A;
   ranks A2;
run;
  A  
  A2  
  10    3  
  10  3
  21  2
  30  1




0 件のコメント:

コメントを投稿