0
我想通过列名读取Stata矩阵元素,以便在运行回归后循环使用varlist
。按列名提取Stata矩阵元素
在下面的代码中,它有时会起作用,但不是所有的时间。我无法弄清楚为什么。
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
}
}
谢谢,但从'帮助矩阵子脚本'它不清楚。它是数字和文本的混合吗?在帮助文件中,他们显示文本子脚本。无论如何,这工作!谢谢! –
此外,上述工作在我的玩具代码中,但在某些情况下,我收到以下错误。 'type mismatch r(109);' –
在'help matrix subscripting'中,描述的第二句是_Subscripting by row/column name may be used in a matrix context._'scalar'命令不是矩阵命令。请注意,列名和行名必须是“字符串”,所以围绕宏扩展的引号应该是“必需的”,不仅在“colnumb”中,而且在其他矩阵表达式中都是如此。当我写最初的建议时,我在试图缩小问题时遇到了这个问题,因此我希望您使用了未引用的列名。 – 2016-08-23 23:49:05