按列名提取Stata矩阵元素

按列名提取Stata矩阵元素,stata,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'" !=

我想按列名读取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
都是负数,但在我自己的单独代码中,它对正系数无效

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

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
    }
}

请参阅
帮助矩阵订阅
,了解使用列名订阅失败的原因。将您的线路替换为

        scalar beta = b[1,colnumb(b,"`v'")]

确实有效。

有关使用列名订阅的尝试失败原因的解释,请参见
帮助矩阵订阅。将您的线路替换为

        scalar beta = b[1,colnumb(b,"`v'")]

确实有效。

谢谢,但是从
帮助矩阵子脚本中不清楚。是数字和文字的混合体吗?在帮助文件中,它们显示文本子脚本。无论如何,这是可行的!谢谢同样,上面的代码也适用于我的玩具代码,但在某些情况下,我会出现以下错误<代码>类型不匹配r(109)在帮助矩阵下标中
说明的第二句是按行/列名下标,只能在矩阵上下文中使用。
标量
命令不是矩阵命令。请注意,列名和行名必须是
字符串
,因此需要围绕宏展开的
“引号”
,不仅在“colnumb”中如此,在其他矩阵表达式中也是如此。当我写我的初始建议时,我在试图缩小问题范围时遇到了这个问题,所以我希望您使用了一个不带引号的列名。谢谢,但是从
help matrix sub scripting
看不清楚。是数字和文字的混合体吗?在帮助文件中,它们显示文本子脚本。无论如何,这是可行的!谢谢同样,上面的代码也适用于我的玩具代码,但在某些情况下,我会出现以下错误<代码>类型不匹配r(109)在帮助矩阵下标中
说明的第二句是按行/列名下标,只能在矩阵上下文中使用。
标量
命令不是矩阵命令。请注意,列名和行名必须是
字符串
,因此需要围绕宏展开的
“引号”
,不仅在“colnumb”中如此,在其他矩阵表达式中也是如此。当我写我的初始建议时,我在试图缩小问题范围时遇到了这个问题,所以我希望您使用了一个不带引号的列名。