2

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

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

在这方面的任何帮助将不胜感激。

4

1 回答 1

3

这里有几个问题。一方面,您不能sysuse使用if子句,与 with 不同use

无需在循环的每次迭代中重新定义程序。定义它,然后循环。

我也不确定你为什么需要一个程序,但这是一个品味问题,或者这可能只是一个教学示例。

estadd下面代码中的命令是estoutSCC 套件的一部分。

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)
}
于 2013-07-11T21:34:01.970 回答