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已经理解了你的警告。我通常会标记这些消失的问题,以便重新打开。