2014年2月13日木曜日

グループ間連番をふる方法


グループ間連番をふる方法を簡単に紹介。


サンプルデータ

data DT1;
input SUBJID$  VAL$;
cards;
001  a
001  b
005  c
005  d
005  e
010  f
010  g
;

データセット「DT1」
SUBJID  VAL
001         a
001         b
005         c
005         d
005         e
010         f
010         g

求めたい結果
「SUBJID」毎の連番をふる。

SUBJID  VAL  SEQ
001         a        1
001         b        1
005         c        2
005         d        2
005         e        2
010         f         3
010         g        3





連番をふる

*** 方法1 **********;
proc sort data=DT1; by SUBJID; run;

data DT2;
  set DT1;
  by SUBJID;

  if  first.SUBJID then SEQ+1 ;
run;

*** 方法2 **********;
proc sort data=DT1; by SUBJID; run;

data DT2;
  set DT1;
  by SUBJID;

  SEQ + first.SUBJID ;
run;

方法1もそんなに面倒な処理をしていないので、この方法でも良いけど、
方法2の方がスッキリしてるのでおすすめ。



📝注意点

今回のテクニックの中で使用している「FIRST.BY変数」は「サブセット化IF」と一緒に使用すると正しく動かなくなる事があります。
(解説記事:「サブセット化IFでありがちな落とし穴」)



0 件のコメント:

コメントを投稿