Создать переменную, если больше, чем среднее, по группе - PullRequest
0 голосов
/ 06 сентября 2018

Я хотел бы сгенерировать переменную newvar, которая равна 1 для наблюдений, которые выше среднего для двух переменных (var1 и 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 голосов
/ 06 сентября 2018

Вот один из способов сделать это.Начните с переменной счетчика с нулевым значением выше.Переберите две переменные, вычислите среднее для группы и добавьте 1 к элементу above_grp_means, если значение выше среднего.Затем перекодируйте выше_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 обрабатывает это в случае, если у вас отсутствуют данные.

...