Вы можете использовать цикл более 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 фактически должен интерпретировать механизм цикла, хотя стоимость этого должна быть тривиальной. Всегда учитывайте время, потраченное на чтение кода.