-2

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

例如,当 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
.           .
.           .
.           .
4

2 回答 2

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;
于 2012-04-10T12:22:04.547 回答
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;
于 2012-04-06T22:09:27.050 回答