Stata 如果大于平均值,则按组生成变量

Stata 如果大于平均值,则按组生成变量,stata,Stata,我想生成一个变量newvar,对于高于两个变量(var1和var2)平均值的观察值,该变量等于1,其中该平均值不是全局数据集平均值,而是观察值所属组内观察值的平均值(变量group) 以下是一个可复制的示例: clear input str59 group float(var1 var2) "Algeria" 0 .000033156746 "Algeria" 0 .00017467902 "Algeria" 0 .00024518964 "Algeria" 0 .000624

我想生成一个变量
newvar
,对于高于两个变量(
var1
var2
)平均值的观察值,该变量等于1,其中该平均值不是全局数据集平均值,而是观察值所属组内观察值的平均值(变量
group

以下是一个可复制的示例:

clear
input str59 group float(var1 var2)
"Algeria"  0 .000033156746
"Algeria"  0  .00017467902
"Algeria"  0  .00024518964
"Algeria"  0    .000624308
"Angola"  0   .0007729884
"Angola"  0   .0014512347
"Angola"  0    .001463664
"Angola"  0   .0015886982
end

这里有一种方法可以做到这一点。从一个全零计数器变量开始,高于\u grp\u的意思。循环两个变量,计算组特定的平均值,如果值高于平均值,则将1添加到上方的_grp_平均值。然后将上面的代码重新编码为二进制标志

gen above_grp_means = 0

foreach x of varlist var1 var2 {
    bysort group: egen mean = mean(`x')
    replace above_grp_means = above_grp_means + 1 if `x'>=mean & !missing(`x')
    drop mean
}

replace above_grp_means = cond(above_grp_means==2,1,0)

Stata将丢失的数据概念化为一个非常大的正数,但if条件的第二部分会处理丢失数据的情况

再加上我的一个。顺便说一下,这个问题与我回答的问题略有不同。也许你会更幸运,OP不会删除它。@PearlySpuncer这样的删除是令人讨厌的,但希望OP已经理解了你的警告。我通常会标记这些消失的问题,以便重新打开。