按组生成大于均值的变量

时间:2018-09-06 14:12:52

标签: stata

对于要高于两个变量(newvarvar1)的平均值的观测值,我想生成一个等于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

1 个答案:

答案 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条件的第二部分将在丢失数据的情况下进行处理。