2

我认为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 组。

4

1 回答 1

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),但参数 ofmax()可以是表达式,因此语法很容易扩展到更一般的情况,例如max(foo == 42).

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

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

但是,这会因丢失 on 而引发flag,因此您需要解决此问题。反过来,这可能只是

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

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

于 2013-10-31T02:17:09.903 回答