在Stata循环中运行程序

时间:2013-07-11 20:45:00

标签: loops stata

我正在尝试在循环中运行程序,但我正在

-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);

在这方面的任何帮助将受到高度赞赏。

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)
}