我想按列名读取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
}
}
weight
和trunk
失败,但headroom
失败。 weight
和trunk
都是否定的,但在我自己的单独代码中,它会因正系数而失败。
使用手动计数器工作(如下),但为什么它会因列名失败?还有其他解决方案吗?
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
}
}
答案 0 :(得分:4)
请参阅help matrix subscripting
,了解您尝试使用列名进行下标的原因无效。用
scalar beta = b[1,colnumb(b,"`v'")]
确实有效。