【问题标题】:running program inside a loop in Stata在Stata的循环内运行程序
【发布时间】:2013-07-11 20:45:00
【问题描述】:

我试图在循环中运行一个程序,但我得到了

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

我们将非常感谢您在这方面的任何帮助。

【问题讨论】:

    标签: loops stata


    【解决方案1】:

    这里有几个问题。一方面,您不能在 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)
    }
    

    【讨论】:

    • 是的,我确实需要一个程序来解决我的问题。非常感谢!
    猜你喜欢
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    相关资源
    最近更新 更多