如何根据“组”向行添加密钥?

时间:2016-01-21 22:49:37

标签: sql sas relational-database

我有这样的数据集:

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;

1 个答案:

答案 0 :(得分:2)

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

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加1键。

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

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

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