Есть ли более эффективный способ запустить три статистики по регрессиям с разными ссылочными группами? - PullRequest
0 голосов
/ 29 мая 2019

Я хочу запустить эти три регрессии. Обратите внимание, что у каждого есть своя справочная группа, поэтому я запускаю их отдельно.

  1. statsby _b, by(grp_iden) saving(reg_aaa.dta, replace): reg prezzo ib43.city_str i.marca_str, baselevels

  2. statsby _b, by(grp_iden) saving(reg_bbb.dta, replace): reg prezzo ib6.city_str i.marca_str, baselevels

  3. statsby _b, by(grp_iden) saving(reg_ccc.dta, replace): reg prezzo ib11.city_str i.marca_str, baselevels

Однако, прежде чем запускать каждый, я прибегаю к следующему:

Перед запуском регрессии (1) я использую: keep if rcode=="aaa"

Перед запуском регрессии (2) я использую: keep if rcode=="bbb"

Перед запуском регрессии (3) я использую: keep if rcode=="ccc"

Существует ли способ более эффективного выполнения трех statsby регрессий, и, возможно, без необходимости отбрасывать наблюдения из выборки перед каждой соответствующей регрессией?

Может сработать что-то вроде следующего, но мне нужно будет найти способ выбрать разные референтные группы (т. Е. Разные XX в ib XX .city_str) в каждом rcode наборе:

statsby _b, by(rcode grp_iden) saving(reg_ccc.dta, replace): reg prezzo ib11.city_str i.marca_str, baselevels

1 Ответ

2 голосов
/ 29 мая 2019

Вы можете использовать цикл более 43 6 11, а также более aaa bbb ccc:

tokenize "aaa bbb ccc" 
local x = 1 
foreach g in 43 6 11 { 
    statsby _b, by(grp_iden) saving(reg_``x''.dta, replace): reg prezzo ib`g'.city_str i.marca_str if rcode == "``x''", baselevels
    local ++x 
}

У меня очень смешанные чувства по поводу такого кодирования. Конечно, вы используете общую структуру, чтобы сделать код короче. Если бы реальная проблема включала, скажем, 10 случаев, это бы сильно очистило код. Если бы реальная проблема была очень похожей, вы могли бы потерять много ясности для себя позже, для людей в вашей команде и для других людей, пытающихся понять ваш код. Резкий тест состоит в том, что, если вы не понимаете, как сделать это самостоятельно, это может быть сложнее, чем вы хотели бы использовать. Но также верно и то, что мы растем только за счет того, как используем языковые функции, которые затем становятся частью нашего основного инструментария.

Эффективность всегда звучит лучше, чем ее недостаток, но сделать код более умным, но менее ясным, часто не очень хорошая идея. Выигрыш во времени от цикла сомнительный: Stata фактически должен интерпретировать механизм цикла, хотя стоимость этого должна быть тривиальной. Всегда учитывайте время, потраченное на чтение кода.

...