Использование функций egen с replace - PullRequest
0 голосов
/ 25 марта 2020

Я создал новую переменную из среднего значения другой переменной, используя egen:

egen afd_lr2 = mean(afd_lire2w) if ost == 0

Теперь я хотел бы заменить значения на среднее значение другой переменной, если ost == 1:

replace afd_lr2 = mean(afd_lireo) if ost ==1

Это невозможно, поскольку функцию среднего нельзя использовать с командой replace.

Как мне достичь своей цели?

Ответы [ 2 ]

1 голос
/ 26 марта 2020

Это должно работать

egen afd_lr2 = mean(cond(ost == 0, afd_lire2w, cond(ost == 1, afd_lireo, .))), by(ost) 

Вот тест:

clear
input float(group y1 y2)
1 42   .
1 42   .
2  . 999
2  . 999
end

egen mean = mean(cond(group == 1, y1, cond(group == 2, y2, .))), by(group)

tabdisp group, c(mean)

----------------------
    group |       mean
----------+-----------
        1 |         42
        2 |        999
----------------------

Ключ в том, что функция mean() egen подает выражение, которое может быть сложнее, чем одно имя переменной. Тем не менее, это сложнее, чем я бы вообще посоветовал, так как

generate work = afd_lire2w if ost == 0
replace work = afd_lireo if ost == 1
egen mean = mean(work), by(ost)

легче понять и он должен прийти в голову программисту в любом случае.

1 голос
/ 25 марта 2020

У меня работает следующее:

sysuse auto, clear

generate price2 = price + 5345

egen a_price = mean(price) if foreign == 0
egen b_price = mean(price2) if foreign == 1

replace a_price = b_price if foreign == 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...