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