本文介绍了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也是如此。

推荐答案

您是对的: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:根据组中任意值的特征标记组中的所有值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-30 20:33