如何根据 "group" 向行添加键?

How do I add a key to a row based on its "group"?

我有这样的数据集:

a 10
a 13
a 14
b 15
b 44
c 64
c 32
d 12

我想编写一个 PROC SQL 语句或 DATA 步来产生这个:

a 10 1
a 13 1
a 14 1
b 15 2
b 44 2
c 64 3
c 32 3
d 12 4

怎么办?

DATA TEST;
   INPUT id $ value  ;
   DATALINES;
a 10
a 13
a 14
b 15
b 44
c 64
c 32
d 12
;
RUN;

根据需要对数据进行排序:

proc sort data=test;
by id;
run;

然后:

data want;
set test;
retain key;
by id;
if _n_ = 1 then key = 0;
if first.id then key = key + 1;
run;

retain 语句将通过迭代保留key 的值。 然后,每当出现新的 id 时,我们将 1 加到 key.


或者如 Keith 所述,您可以使用这个简化的数据步骤来完成这项工作:

data want;
set test;
by id;
if first.id then key + 1;
run;

我将两个版本留在这里供参考,因为我认为第一个更容易理解,而 Keith 评论中的最后一个更清晰。