Stata:根据组中任何值的特征标记组中的所有值

时间:2013-10-31 01:50:23

标签: stata

我认为egen可能对我有帮助,但无论出于何种原因,我都无法找到正确的语法。如果对于组中的任何观察结果,X为真,我想为组中的所有观测值创建一个值为1的新变量。因此,例如,我的数据包含obsgroupflag变量,我想生成变量grpflag

obs    group  flag    grpflag
1      1      0       1
2      1      1       1
3      1      0       1
4      2      0       0
5      2      0       0
6      2      0       0
7      3      1       1
8      3      0       1

因此,在示例数据中,由于flag==1对于组1中的一个(即任何)观察,我希望grpflag对组1中的所有观察值取值1。第3组也是如此,第2组则相反。

1 个答案:

答案 0 :(得分:3)

你是对的:egen命令可以做到这一点。

egen grpflag = max(flag), by(group) 

有关以下对应关系的更多详细信息,请参阅Stata常见问题http://www.stata.com/support/faqs/data-management/create-variable-recording/:最大值和所有:最低限度在Stata中使用。

请注意,虽然您的示例很简单(flag已经是0或1,因此max()可以直接应用于flagmax()的参数可以是表达式,因此语法很容易扩展到更一般的情况,例如max(foo == 42)

即使egen不可用,或者没有这样的工作,这种单线程也可以在Stata中使用,并且比调用egen更有效:

bysort group (flag) : gen grpflag = flag[_N] 

然而,flag上的遗漏会引发这种情况,所以你需要解决这个问题。反过来,这可能只是

gen isflag = flag == 1 
bysort group (isflag) : gen grpflag = isflag[_N] 

一般原则是,只要您排序的内容只是0和1,任何1的值都将在每个观察块中排序到最后。