Variables SAS:中间缺失值的枚举组变量
您好,我正在尝试在SAS中生成一个组标识符变量,该变量对于该组的第一个成员是可见的,对于该组的所有后续成员都是缺失的。理想的情况下,我也希望它能在它下降的时候列举出这些组。例如,我想用VAR1创建VAR3 我知道这是一件很容易做到的事情,如下所示:Variables SAS:中间缺失值的枚举组变量,variables,sas,grouping,enumeration,indicator,Variables,Sas,Grouping,Enumeration,Indicator,您好,我正在尝试在SAS中生成一个组标识符变量,该变量对于该组的第一个成员是可见的,对于该组的所有后续成员都是缺失的。理想的情况下,我也希望它能在它下降的时候列举出这些组。例如,我想用VAR1创建VAR3 我知道这是一件很容易做到的事情,如下所示: egen VAR3=group(VAR1) replace VAR3=. if VAR1[_n]==VAR1[_n-1] 但我不知道如何在SAS中做到这一点。我知道,通过这样做,你可以做类似的事情: data zzz; set yyy; g_ob
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\u id\u1
语句使\u id\u1
从数据步骤的一次迭代到下一次迭代保留其值(最初设置为一)。然后,利用第一个。变量
可以计算组标识符。基本上,FIRST.variable为by组中的第一个观察值指定一个值,为by组中的所有其他观察值指定零。请记住,在应用FIRST.variable之前,需要按组对数据进行排序
因此,如果数据没有按照<代码> VAR1进行排序,就像它在示例中的情况一样,请考虑在数据步之前添加<代码> PROC排序 <代码> VAR1否则将引发错误。 结果(
want
):