我需要修改我在某些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 |
+----------------------------------+
答案 0 :(得分:1)
尝试更改_b[hcovany]
的{{1}}。需要说明的是,以下非感性示例与您的代码类似,但不使用_b[some-value-label]
,而_b[sex]
是变量,而是使用sex
,其中_b[Male]
是Male
的值标签。子群体大小和标准误差
也保存了。
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
及其链接:
[U] 13.5访问系数和标准误差。