按列名提取Stata矩阵元素
我想按列名读取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'" !=
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”中如此,在其他矩阵表达式中也是如此。当我写我的初始建议时,我在试图缩小问题范围时遇到了这个问题,所以我希望您使用了一个不带引号的列名。