-1

収入に関する 133 の変数があります (各変数はグループを表します)。これらすべてのグループのジニ係数が必要なのでineqdeco、Stata で使用します。これらの係数をすべて手作業で計算することはできないため、for ループを作成しました。

gen sgini = . 
foreach var of varlist C07-V14 {
forvalue i=1/133 {
ineqdeco `var'
replace sgini[i] = $S_gini
 }
}

また、順序を変更してみました:

 foreach var of varlist C07-V14 {
 ineqdeco `var'
 forvalue i=1/133 {
 replace sgini[i] = $S_gini
  }
 }

そしてi事前に指定します:

gen i = 1 
foreach var of varlist C07-V14 {
    ineqdeco `var'
    replace sgini[i] = $S_gini
    replace i = i+1
     }
    }

とにかく、この最後の方法が機能するかどうかはわかりません。すべての場合で、エラーが発生します: weight not allowed r(101)。これが何を意味するのか、何をすべきかわかりません。基本的に、133 個の変数すべてのジニ係数を計算し、これらの値を長さ 133 のベクトルに格納したいので、すべての係数が格納された単一の変数になります。

replace編集:エラーはコマンドに関係していることがわかりました。この行を次のように置き換えました。

replace sgini  = $S_gini in `i'

しかし、今は「ループ」しないので、 のすべてのエントリで最初の値を取得しますsgini

4

1 に答える 1

0

内部ループの明確な理由はありません。観測よりも多くの変数がない場合、これはうまくいくかもしれません:

gen sgini = . 
gen varname = "" 
local i = 1 
foreach var of varlist C07-V14 {
    ineqdeco `var'
    replace sgini = $S_gini in `i' 
    replace varname = "`var'" in `i' 
    local i = `i' + 1 
}

あなたのコードで明らかな問題(と思われる)には、次のものがあります。

  1. 変数とローカル マクロの混乱。他の言語の経験が豊富な場合、古い精神的習慣を断ち切るのは困難です。(Mata は他の言語に似ています。)

  2. 観測のループが自動であることを認識していません。または、ここで必要なループが 1 つだけであることに気付いていない可能性があります。ひねりを加えたのは、変数のループは簡単ですが、付随する観測のループは独自のコードで調整する必要があることです。

  3. a の LHS に添え字を付けreplaceます。表記は[]重み用に予約されていますが、いずれにしても違法です。重みについて調べるには、search weightsまたはhelp weight.

この方法で結果を記録すると、ジニ係数は他のものと一致しないことに注意してください。そのためのトークン修正は、上記のように、関連する変数名を一緒に記録することです。

このソリューションのより高度なバージョンはpostfile、新しいデータセットに保存するために使用することです。

于 2015-12-07T16:21:11.803 に答える