1

我需要修改下面的代码,我在一些 CPS 数据上使用它来捕获保险范围。我需要输出一个包含人口普查区域覆盖百分比的文件(有四个)。它应该看起来像这样:

region n     percent
1      xxx   xx
2      xxx   xx
3      xxx   xx
4      xxx   xx

如有必要,我可以使用两行来定义每个区域中覆盖和未覆盖的百分比,但我真的只需要覆盖的百分比。

这是我正在使用的代码:

svyset [iw=hinswt], sdrweight(repwt1-repwt160) vce(sdr)

tempname memhold
postfile `memhold' region_rec n prop using Insurance, replace
levelsof region_rec, local(lf)

foreach x of local lf{
svy, subpop(if region_rec==`x' & age>=3  & age<=17): proportion hcovany
scalar forx = `x'
scalar prop = _b[hcovany]

matrix  b =  e(_N_subp)
matrix c = e(_N)
scalar n = el(c,1,1)
post `memhold' (forx) (n) (prop) 
}

postclose `memhold'
use Insurance, clear
list

这是它产生的:

Survey: Proportion estimation    Number of obs    =     210648
                                 Population size  =  291166198
                                 Subpop. no. obs  =      10829
                                 Subpop. size     = 10965424.5
                                 Replications     =        160

  _prop_1: hcovany = Not covered

--------------------------------------------------------------
             |                 SDR
             | Proportion   Std. Err.     [95% Conf. Interval]
-------------+------------------------------------------------
hcovany      |
     _prop_1 |   .0693129   .0046163      .0602651    .0783607
     Covered |   .9306871   .0046163      .9216393    .9397349
--------------------------------------------------------------
[hcovany] not found
r(111);

我不知道如何绕过底部的错误消息并让它保存结果。我认为 SE 和 CV 也是一个理想的功能,但我不确定如何在矩阵框架内处理它。

编辑:附加输出

     +----------------------------------+
     | region~c       n       prop   se |
     |----------------------------------|
     |        1    9640   .9360977    2 |
     |        2   12515   .9352329    2 |
     |        3   14445   .8769684    2 |
     |        4   13241   .8846368    2 |
     +----------------------------------+
4

1 回答 1

1

尝试更改_b[hcovany]_b[some-value-label]. 需要明确的是,以下无意义的示例与您的代码类似,但不是使用_b[sex]wheresex是一个变量,而是使用_b[Male]whereMale是一个值标签sex。亚群大小和标准误差也被保存。

clear all
set more off

webuse nhanes2f
svyset [pweight=finalwgt]

tempname memhold
tempfile results
postfile `memhold' region nsubpop maleprop stderr using `results', replace

levelsof region, local(lf)

foreach x of local lf{
    svy, subpop(if region == `x' & inrange(age, 20, 40)): proportion sex
    post `memhold' (`x') (e(N_subpop)) (_b[Male]) (_se[Male])
}

postclose `memhold'

use `results', clear
list 

如果我们使用_b[sex]而不是_b[Male],我们会得到与r(111)您原始帖子中相同的错误。

对于这个例子,让我们看看e(b)包含估计比例的矩阵是什么样子的:

. matrix list e(b)

e(b)[1,2]
          sex:       sex:
         Male     Female
y1  .48821487  .51178513

因此,如果我们想提取女性而不是男性的比例,我们可以使用_b[Female].

另一种选择是将估计结果保存在矩阵中并使用数字下标:

<snip>
matrix b = e(b)
post `memhold' (`x') (b[1,2]) 
<snip>

还有其他一些细微的变化,例如使用inrange和直接使用返回的估计结果post

此外,您可能想看看help _variables它的链接:

[U] 13.5 访问系数和标准误差。

于 2013-11-12T00:40:44.053 回答