2016-01-21 38 views
0

我有一个数据集是这样的:如何根据其“组”将密钥添加到行中?

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; 

回答

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; 

的保留声明将通过迭代留住关键的价值。 然后,每当出现一个新的ID,我们总结1键。


或者由基思说,你可以使用这个简化的数据一步做的工作:

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

我会离开这里两个版本以供参考,因为我第一个想到的是更容易理解,基斯评论中的最后一个更清晰。

+0

完美,谢谢。 –

+1

您可以在'retain'语句中设置'key'的初始值。 '保留键0'意味着你不需要'if _n_ = 1 then key = 0' – Longfish

+1

你也可以完全删除'retain'语句,只需要'if first.id then key + 1'。使用'key + 1'这种方式会自动保留下一个观察值。 – Longfish

相关问题