按列名

时间:2016-08-23 15:48:40

标签: stata

我想按列名读取Stata矩阵元素,以便在运行回归后循环遍历varlist

在下面的代码中,它有时会起作用,但不是所有时间。我无法弄清楚原因。

sysuse auto, clear
scalar drop _all
matrix drop _all

regress price weight headroom trunk
matrix b = e(b)
local colnames : colnames b
foreach v of local colnames {
    if ("`v'" != "_cons") {
        display "-------------------------"
        display "`v'"
        quietly summarize `v', detail
        scalar beta = b[1,`v']
        scalar p75 = `r(p75)'
        scalar p25 = `r(p25)'
        scalar iqr = p75 - p25
        scalar effect = beta * iqr
        scalar dir
    }
}

weighttrunk失败,但headroom失败。 weighttrunk都是否定的,但在我自己的单独代码中,它会因正系数而失败。

使用手动计数器工作(如下),但为什么它会因列名失败?还有其他解决方案吗?

regress price weight headroom trunk
matrix b = e(b)
local colnames : colnames b
local i = 1 
foreach v of local colnames {
    if ("`v'" != "_cons") {
        display "-------------------------"
        display "`v'"
        quietly summarize `v', detail
        scalar beta = b[1,`i']
        local ++i
        scalar p75 = `r(p75)'
        scalar p25 = `r(p25)'
        scalar iqr = p75 - p25
        scalar effect = beta * iqr
        scalar dir
    }
}

1 个答案:

答案 0 :(得分:4)

请参阅help matrix subscripting,了解您尝试使用列名进行下标的原因无效。用

替换你的行
        scalar beta = b[1,colnumb(b,"`v'")]

确实有效。