我认为egen
可能对我有帮助,但无论出于何种原因,我都无法找到正确的语法。如果对于组中的任何观察结果,X为真,我想为组中的所有观测值创建一个值为1的新变量。因此,例如,我的数据包含obs
,group
和flag
变量,我想生成变量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组则相反。
答案 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()
可以直接应用于flag
)max()
的参数可以是表达式,因此语法很容易扩展到更一般的情况,例如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的值都将在每个观察块中排序到最后。