Хранение остатка для каждой группы - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь запустить регрессионный анализ в Stata с разными year и group:

generate y = .

areg X1 X2 X3 if year == 1997, absorb(group)
predict r1997, res
replace y = r1997 if e(sample)

areg X1 X2 X3 if year == 1998, absorb(group)
predict r1998, res
replace y = r1998 if e(sample)

areg X1 X2 X3 if year == 1999, absorb(group)
predict r1999, res
replace y = r1999 if e(sample)

Однако, если есть много year и group, это неэффективно.

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

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

1 Ответ

2 голосов
/ 23 сентября 2019

На первый взгляд, это всего лишь один цикл.См. этот FAQ для элементарного введения.

Предположим, ваши годы в 1997-2018 гг .:

generate wanted = . 

forvalues y = 1997 / 2018 { 
    areg X1 X2 X3 if year == `y', absorb(group)
    predict work, res
    replace wanted = work if e(sample)
    drop work 
} 

Код не требует пояснений, если вы об этом думаете.Переменная work - это то, куда я положил остатки.Они не могут быть помещены в wanted, так как предикату нужно новое имя переменной.И наоборот, в следующий раз в цикле, я не могу снова использовать work, если он больше не существует, поэтому он сбрасывается после того, как его значения были скопированы в wanted.

...