我有这样的数据集:
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;
答案 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的评论中的最后一个版本更清晰。