Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables SAS:中间缺失值的枚举组变量_Variables_Sas_Grouping_Enumeration_Indicator - Fatal编程技术网

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

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

您好,我正在尝试在SAS中生成一个组标识符变量,该变量对于该组的第一个成员是可见的,对于该组的所有后续成员都是缺失的。理想的情况下,我也希望它能在它下降的时候列举出这些组。例如,我想用VAR1创建VAR3

我知道这是一件很容易做到的事情,如下所示:

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
):