2013-10-25 3 views
1

У меня есть некоторые данные опроса, которые я использую для анализа Stata. Я хочу вычислить средства одной переменной по группам и сохранить эти средства в файле Stata. Мой код выглядит следующим образом:Файлы вывода 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 или группу, если я могу понять, как использовать при обработке.

+0

'collapse' позволяет' pweights' и непосредственно создает новый набор данных. Извините, но я не знаю, что делает это заклинание SAS. –

+0

Но только в памяти. Мне нужно это на диске. Возможно, он будет сохранен, если я скажу «save», замените. В любом случае, у меня есть репликация весов, поэтому я не думаю, что коллапс будет уместным. Будьте любезны, если бы был способ получить резюме. –

+0

Если вы уменьшите свой набор данных до нового, то ясно, что вы также можете «сохранить» его. Вы также можете «свернуть» стандартное отклонение и, следовательно, вычислить коэффициент вариации. Вы должны объяснить (мне), что вы имеете в виду о репликации веса. Как сказано, 'collapse' поддерживает' pweights'. –

ответ

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 
+0

@SteveSamuelsЭто работает достаточно хорошо, за исключением вычисления sd, который создает несоответствие типа данных. Я подозреваю, что это связано с использованием репликативных весов, изменяющих матрицу, из которой рассчитывается sd id. Кроме того, правильная формула для se есть ((4/160 * sum (X-Xbar) ** 2) **. 5 (это суммировано по 160 репликативным весам), но я не вижу суммы квадратов в означает, что он должен быть рассчитан, правильно? –

+0

@SteveSamuelsMeant добавить, что я хочу CV = SEM/mean –

+0

Возможно, я должен добавить, что в настоящее время я использую Stata 12. Я все еще не понимаю, где _se исходит из. Судя по документации, это должно быть _error, так как матрица является e (ошибка). И может кто-нибудь объяснить матрицу за вычислением sd? Я до сих пор не могу избавиться от несоответствия типа данных. –

2

Вот более простой подход, который создает набор данных, отображаемые результаты оценки: оценочные средства, стандартные ошибки, доверительные пределы, г статистики, и р-значение. svy: mean вызывается с опцией over(), что устраняет необходимость в цикле foreach и вычисляет стандартные ошибки, подходящие для анализа субпопуляции. Результаты оценки содержатся в возвращаемой матрице r(table), которая преобразуется командой svmat в набор данных Stata. В то время как svmat поддерживает имена столбцов, он не сохраняет имена строк (групп), поэтому их необходимо добавить в созданный набор данных merge.

set more off 

use http://www.stata-press.com/data/r13/ss07ptx, clear 
svyset _n [pw= pwgtp], sdrweight(pwgtp*) vce(sdr) 

    ************************************************ * 
    * Set name of grouping variable in double quotes * 
    * in the next line.       * 
    * ************************************************ 
local gpname "sex" 
tempvar gp 
egen `gp' = group(`gpname') 

preserve 
tempfile t1 
bys `gp': keep if _n==1 
keep `gp' `gpname' 
save `t1' 
restore 

svy: mean agep , over(`gp') 
matrix a = r(table)' 
clear 
qui svmat double a, names(col) 
gen `gp'=_n 

merge 1:1 `gp' using `t1' 
keep `gpname' b se z pvalue ll ul 
order `gpname' 
save results, replace 
list 
Смежные вопросы