对于要高于两个变量(newvar
和var1
)的平均值的观测值,我想生成一个等于1的变量var2
,但该平均值不是全局数据集的平均值,但观察值所属的组中的观察值的平均值(变量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
答案 0 :(得分:1)
这是执行此操作的一种方法。从全零计数器变量above_grp_means开始。循环遍历两个变量,计算特定于组的平均值,如果该值高于平均值,则将1加到upper_grp_means中。然后将above_grp_means重新编码为二进制标志。
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条件的第二部分将在丢失数据的情况下进行处理。