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
):
您好,我正在尝试在 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
):