任意の変数の値が重複しているとき、連番を付加する

[OS] ALL
[リリース] ALL
[キーワード] Base, DATA, duplicate value, numbering, FIRST.variable, LAST.variable

[質問]

任意の変数の値が重複しているとき、下記のように連番を付加するには、どのようにすればいいですか。

たとえば、下記のような変数IDがあるとき、変数NOを追加したいと考えています。


    ID    NO
  A001     1
  A001     2
  A002     1
  A002     2
  A002     3
  A003     1
  A004     1
  A004     2

[回答]

BYステートメントとFIRST.変数を使用して、連番を付加することができます。
BY変数の値が同じ間は連番の変数に1を加えて、値が変わったら0をセットします。

プログラム例


  DATA sample;
    INPUT id $;
  CARDS;
  A001
  A001
  A002
  A002
  A002
  A003
  A004
  A004
  ;
  RUN;

  DATA sample;
    SET sample;
    BY id;
    RETAIN no;                                       /* noの値を保持 */
    IF FIRST.id THEN no = 0;        /* 値が変わったら、noに0をセット */
    no + 1;                                           /* noに1を加算 */
  RUN;