在Stata中,我希望按组运行多个回归,并将相应的残差保存在单个变量中。这是我尝试做的一个有效例子:
sysuse auto, clear
forvalues i=0/1 {
regress price mpg if foreign==`i'
predict r_`i' if foreign==`i', resid
}
egen residuals=rowtotal(r_0-r_1) , missing
drop r_0-r_1
虽然上面的循环工作得很好,但我的猜测是,必须有一种更优雅的方法来实现这一目标吗?
答案 0 :(得分:1)
rangestat
允许这样做:
sysuse auto, clear
rangestat (reg) price mpg, int(foreign 0 0)
gen residual = price - b_cons - b_mpg * mpg
该方法扩展到移动窗口以及不相交的组。
答案 1 :(得分:0)
另一种方法是使用tempname
在循环内创建局部变量。然后,我们更新res
(残差)变量。循环结束后,tempname
将被自动删除。这是我的代码:
sysuse auto, clear
* @Pilik's code:
forvalues i=0/1 {
regress price mpg if foreign==`i'
predict r_`i' if foreign==`i', resid
}
egen res = rowtotal(r_0-r_1) , missing
drop r_0-r_1
* My code: use `tempname`
gen res1 = .
forvalues i=0/1 {
regress price mpg if foreign==`i'
tempname r
predict `r' if foreign==`i', resid
replace res1 = `r' if foreign==`i'
}
* Compare two ways: same results
su res res1