SAS:根据组分配序列号
我知道关于序列号也有类似的问题,但我的情况有点不同。 我需要根据组变量分配序列号。现在,我已经按照组变量对数据进行了排序。以下数据只是整个数据集的一部分。基本上,我想创建“serial_num”变量,该变量按组分配唯一的序列号,如下所示 例如,当组=1时,每个组都有自己唯一的序列号。当组=2时,有两个相同的序列号。我希望你们通过观察下面的数据来了解这个模式 提前谢谢SAS:根据组分配序列号,sas,Sas,我知道关于序列号也有类似的问题,但我的情况有点不同。 我需要根据组变量分配序列号。现在,我已经按照组变量对数据进行了排序。以下数据只是整个数据集的一部分。基本上,我想创建“serial_num”变量,该变量按组分配唯一的序列号,如下所示 例如,当组=1时,每个组都有自己唯一的序列号。当组=2时,有两个相同的序列号。我希望你们通过观察下面的数据来了解这个模式 提前谢谢 serial_num group ---------------- 1 1 2 1 .
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
. .
. .
. .
使用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;
这是一个奇怪的要求,但这里有一个使用普通旧数据步骤的解决方案
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;
为了提高效率,可以使用UNIQUE-LOC技巧或UNIQUEBY函数。例如,请参见“谢谢”!嗯,有一点问题。有四个不同的组(1到4),我有500000多个观察结果。@statchoi所以这段代码符合您想要的模式吗?如果是的话,那么出于你对效率的考虑,我可以根据瑞克的建议来改进。不幸的是,我在工作中没有可用的程序,这让我感到惊讶。因此,我无法验证代码是否符合模式。