0
回帰を実行した後にvarlist
にループするように、Stata行列要素を列名で読み取ってみたいと思います。列名で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
}
}
ありがとうございますが、 'help matrix subscripting'からは明らかではありません。数字とテキストが混在していますか?ヘルプファイルには、テキストサブスクリプトが表示されます。いずれにせよ、これは機能します!ありがとう! –
また、上記は私のおもちゃのコードで動作しますが、場合によっては次のエラーが発生します。 'type mismatch r(109);' –
'help matrix subscripting'では、記述の2番目の文は_Subscripting by行/列名は行列コンテキストでのみ使用できます。' scalar'コマンドは行列コマンドではありません。列と行の名前は 'string'でなければならないので、マクロ展開を囲む' 'が必要です。これは' colnumb 'だけでなく他の行列式でも当てはまります。最初のアドバイスを書いていたときに問題を絞り込もうとしていたときにこの問題が発生したため、引用符で囲まれていない列名を使用したと考えられます。 –