在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
虽然上面的循环运行得很好,但我猜一定存在一种更优雅的方法来实现这一点?
发布于 2015-05-02 18:57:41
你应该试试statsby
:
use http://www.stata-press.com/data/r13/auto2
statsby _b, by(foreign) verbose nodots: regress price weight length mpg
发布于 2018-11-06 10:30:55
另一种方法是使用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
发布于 2018-11-06 11:44:00
来自SSC的rangestat
支持以下功能:
sysuse auto, clear
rangestat (reg) price mpg, int(foreign 0 0)
gen residual = price - b_cons - b_mpg * mpg
该方法扩展到移动窗口以及不相交的组。
https://stackoverflow.com/questions/26487616
复制