RANKプロシジャのタイ値を連番にする方法について

[OS] ALL
[リリース] ALL
[キーワード] function

[質問]

RANKプロシジャを使用してランク付けをする際に、ランク付け対象の変数が同一であった場合、タイ値となりますが、タイ値とせずに連番を採番する方法はありますか。

[回答]

RANKプロシジャでは、同一のランクに対して連番を付与することができません。
連番を手動で採番するプログラムを作成し対応する方法となります。

例えば、サンプルプログラムでは、変数:_rankにて、ランク値を手動で採番しております。
また、変数:idが切り替わった際に、採番を1から振り直しをおこなっているプログラムとなります。

- サンプルプログラム
  /*サンプルデータの作成*/
  DATA sample;
    INPUT group $ goods $ price ;
    CARDS;
    0001 name1 300
    0002 name1 100
    0001 name3 300
    0001 name4 100
    0003 name1 300
    0002 name2 200
    0003 name2 100
    0001 name2 200
    ;
  RUN;
  
  /*ソートを実施*/
  PROC SORT DATA=sample OUT=sorted;
  BY group DESCENDING price;
  RUN;
  
  /*ランクの採番*/
  DATA result;
    SET sorted;
    BY group DESCENDING price;
    RETAIN _rank 0;
    
    IF first.group = 1 THEN _rank = 0;
    
    _rank = _rank +1;
  RUN;