1

Stata を使用して分析している調査データがいくつかあります。グループごとに 1 つの変数の平均を計算し、それらの平均を Stata ファイルに保存したいと考えています。私のコードは次のようになります。

svyset [iw=wtsupp], sdrweight(repwtp1-repwtp160) vce(sdr)
svy: mean x

私は試した

svy: by grp: mean x

しかし、それはうまくいきませんでした。単純に言うだけで、各平均を個別のファイルに保存できます

svy: mean x if grp==1

しかし、それは非効率的です。より良い方法はありますか?

SAS ODS を使用して結果を取得できるように、結果をファイルに保存することも必要です。ここでログについて話しているのではありません。手段と関連するグループが必要です。考えている

estimates save [path],replace

しかし、処理によって使用方法を理解できる場合、それが私にStataファイルまたはグループを与えるかどうかはわかりません。

4

2 に答える 2

2

10/28 編集 このバージョンには読みやすさの改善が含まれており、結果変数と保存されたデータセットはローカル マクロで指定されます。foreachしたがって、アナリストはブロックに触れる必要はありません。el行列関数の代わりに、書きやすく読みやすい行列添字式が使用されm[1,1]ますel("m",1,1)

sysuse auto, clear
svyset _n
************************************************  *
* Set names of grouping variable and results data *
* set in double quotes in  the  next line.        *
* ************************************************
local yvar    mpg  // variable for mean
local gpname  "foreign"
local d_results "results"

tempvar gp
gen `gp' = `gpname'

tempname memhold
postfile `memhold'  ///
`gpname' n mean se sd using `d_results', replace

levelsof `gp', local(lg)
foreach x of local lg{
svy, subpop(if `gp'==`x'): mean `yvar'
   matrix m = e(b)
   matrix v = e(V)
   matrix a = e(V_srssub)
   matrix b = e(_N_subp)
   matrix c = e(_N)

   scalar gx  = `x'
   scalar mean = m[1,1]
   scalar sem = sqrt(v[1,1])
   scalar sd = sqrt(b[1,1]*a[1,1])
   scalar n = c[1,1]
   post `memhold' (gx) (n) (mean) (sem) (sd)
}
postclose `memhold'
use results, clear
list
于 2013-10-26T02:24:45.427 に答える