SAS:中间缺失值的枚举组变量

SAS: Enumerated Group Variable with Missing Values in the Middle

您好,我正在尝试在 SAS 中生成一个组标识符变量,该变量对于该组的第一个成员是可见的,并且对于同一组的所有后续成员都是缺失的。理想情况下,我还希望它在下降时枚举这些组。例如,我想从 VAR1

创建 VAR3

我知道这是 STATA 类似这样的事情可以很容易地完成,如下所示:

egen VAR3=group(VAR1)
replace VAR3=. if VAR1[_n]==VAR1[_n-1]

但我不知道如何在 SAS 中执行此操作。我知道你可以做类似的事情:

data zzz; set yyy;
g_obs=_n_; run;

Proc sql; create table X as
select a.VAR1, a.VAR2, case where b.VAR1 ne a.VAR1 then a.VAR1 else . end as VAR3
from zzz a left join zzz b where a.VAR1=b.VAR1 and a.g_obs=(b.g_obs-1); quit;

问题是我没有得到那个枚举。

有人知道怎么做吗?

提前致谢。

考虑你的例子:

data have;
infile datalines4 delimiter=",";
input var1 $ var2;
datalines4;
a,1
a,2
b,3
b,5
b,45
c,23
c,7
;;;;

以下为您提供所需的输出:

data want;
retain _id_ 1;
set have;
by var1 notsorted;
if first.var1 = 1 then do;
    var3 = _id_;
    _id_ + 1;
end;
else var3=.;
drop _id_;
run;

retain _id_ 1 语句导致 _id_ 从数据步骤的一次迭代到下一次迭代保留其值(最初设置为 1)。然后,利用 FIRST.variable 可以计算组标识符。基本上,FIRST.变量 为分组中的第一个观察值分配值 1,为分组中的所有其他观察值分配值零。请记住,在应用 FIRST.variable.

之前,需要按组对数据进行排序

因此,如果数据尚未按 var1 排序,就像示例中的实际情况一样,请考虑在数据步骤之前添加 proc sort by var1 否则将抛出错误。

结果(want):