2012-04-06 95 views
-2

我知道有关于序列号的类似问题,但我的情况有点不同。 我需要根据组变量分配序列号。现在,我的数据按组变量排序。以下数据只是整个数据集的一部分。基本上,我想创建一个“serial_num”变量,用于指定组中唯一的序列号,如下所示。SAS:根据组别分配序列号

例如,当group = 1时,每个都有自己唯一的序列号。当group = 2时,有两个相同的序列号。我希望你们通过观察下面的数据来获得这种模式。

在此先感谢。

serial_num group 
---------------- 
1   1 
2   1 
.   . 
.   . 
.   . 
7   2 
7   2 
8   2 
8   2 
.   . 
.   . 
.   .  
10   3 
10   3 
10   3 
11   3 
11   3 
11   3 
.   . 
.   . 
.   . 

回答

3

奇怪的要求,但这里是一个使用普通旧数据步骤的解决方案。

data output; 
    set input; 
    by group; 
    if first.group or c = group then do; 
     c = 0; 
     serial_num + 1; 
    end; 
    c + 1; 

    drop c; 
run; 
1

使用IML的粗略解决方案。主要是检查你是否符合你想要的模式,如果有必要,我可以扩展它以启用数据集输入或进行改进。

注意:y是生成的序列号向量。

proc iml; 
x={1,1,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4}; 
y=j(nrow(x),1,.); 

y[1,1]=1; 
j=1; 
do i=2 to nrow(y); 
    if y[i-x[i,1],1]=j then do; 
     j=j+1; 
     y[i,1]=j; 
    end; 
    else if x[i,1]^=x[i-1,1] then y[i,1]=y[i-1,1]+1; 
    else y[i,1]=y[i-1,1]; 
end; 
print y; 
quit; 
+1

要提高效率,可以使用UNIQUE-LOC技巧或UNIQUEBY函数。例如,请参阅http://blogs.sas.com/content/iml/2011/11/07/an-efficient-alternative-to-the-unique-loc-technique/ – Rick 2012-04-08 10:52:56

+0

@Rick谢谢。这是一个很好的阅读。 – 2012-04-09 09:52:04

+0

谢谢!那么,有一些问题。有四个不同的组(1到4),我有500,000多个观察。 – Ken 2012-04-09 15:31:42