本文介绍了Stata:根据组中任意值的特征标记组中的所有值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我认为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也是如此。
推荐答案
您是对的: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都将在每个观察值块中排序到末尾。
这篇关于Stata:根据组中任意值的特征标记组中的所有值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!