我正在尝试在循环中运行程序,但我正在
-Break--
r(1);
这是我的剧本:
clear all
forvalues i=1/5{
sysuse auto if rep78==`i'
capture program drop testpro
program define testpro,eclass
preserve
tabstat price mpg headroom,stat(mean) save
mat avg=r(StatTotal)
ereturn post avg
restore
end
}
--Break--
r(1);
end of do-file
--Break--
r(1);
在这方面的任何帮助将受到高度赞赏。
答案 0 :(得分:3)
这里有几个问题。例如,与sysuse
不同,您不能if
使用use
子句。
没有必要在循环的每次迭代中重新定义程序。定义它,然后循环。
我也不确定你为什么需要一个程序,但这是一个品味问题,或者这只是一个教学范例。
以下代码中的estadd
命令是SCC estout
套件的一部分。
clear all
capture program drop testpro
program define testpro, eclass
tabstat price mpg headroom, stat(mean) save
quietly estadd matrix avg = r(StatTotal), replace
end
forvalues i=1/5 {
sysuse auto, clear
keep if rep78==`i'
testpro
matrix list e(avg)
}