使用前缀在Stata中存储二项式置信区间结果

使用前缀在Stata中存储二项式置信区间结果,stata,confidence-interval,binomial-coefficients,Stata,Confidence Interval,Binomial Coefficients,我试图计算每年完成治疗的患者比例的95%二项Wilson置信区间(数据集为每个人列出的行) 我想将结果存储到矩阵中,这样我就可以使用putexcel命令将结果导出到现有的Excel电子表格中,而无需更改工作表的格式。我创建了一个二进制变量dscomplete\u binary,如果治疗未完成,则该变量为0,如果治疗已完成,则为1 我尝试了以下方法: bysort year: ci dscomplete_binary, binomial wilson level(95) 这使得每年的产量具有95

我试图计算每年完成治疗的患者比例的95%二项Wilson置信区间(数据集为每个人列出的行)

我想将结果存储到矩阵中,这样我就可以使用
putexcel
命令将结果导出到现有的Excel电子表格中,而无需更改工作表的格式。我创建了一个二进制变量
dscomplete\u binary
,如果治疗未完成,则该变量为0,如果治疗已完成,则为1

我尝试了以下方法:

bysort year: ci dscomplete_binary, binomial wilson level(95)
这使得每年的产量具有95%的置信区间。以前我使用
statsby
折叠数据集以将结果存储在变量中,但这会从内存中清除数据集,因此我必须不断地重新打开它

是否有办法运行该命令并以表格格式存储结果,以便以与此类似的方式存储数据:

    year     mean        LowerCI     UpperCI
r1  2005    .7031588    .69229454   .71379805
r2  2006    .75532377   .74504232   .7653212
r3  2007    .78125924   .77125096   .79094833
r4  2008    .80014324   .79059798   .80935836
r5  2009    .81860977   .80955398   .82732689
r6  2010    .82641232   .81723672   .83522016
r7  2011    .81854123   .80955547   .82719356
r8  2012    .83497983   .82621944   .8433823
r9  2013    .85411799   .84527379   .86253893
r10 2014    .84461939   .83499599   .85377985
我尝试了以下命令,这些命令为二项式Wilson选项提供了不同的估计:

svyset id2
bysort year: eststo: ci dscomplete_binary, binomial wilson level(95)

我认为
postfile
命令系列将在这里帮助您。这不会将数据保存到矩阵中,但会将
ci
命令的结果保存到一个新的数据集中,您可以命名该数据集并设置其结构。分析完成后,您可以加载通过
postfile
保存的数据,并按照您选择的方式导出到Excel

对于
postfile
,可以在循环中分析数据,而不是使用
by
bysort

假设数据运行的年份为2005-2014年,以下是示例代码:

/*make sure no postfile is open, in case a previous run did not close the file*/
cap postclose ci_results

/*create the postfile that will store results*/
postfile ci_results year mean lowerCI upperCI using ci_results.dta, replace

/*loop through years*/
forval y = 2004/2014 {
    ci dscomplete_binary if year==`y', binomial wilson level(95)
        /*store saved results from ci to postfile.  Make sure the post statement contains results in the same order stated in postfile command.*/
    post (`y') (r(mean)) (r(lb)) (r(ub))
}

/*close the postfile once you've looped through all the cases of interest*/
postclose ci_results
use ci_results.dta, clear

一旦您将ci_results.dta数据加载到内存中,您就可以应用任何您喜欢的Excel导出命令。

我认为
postfile
命令系列将在这里帮助您。这不会将数据保存到矩阵中,但会将
ci
命令的结果保存到一个新的数据集中,您可以命名该数据集并设置其结构。分析完成后,您可以加载通过
postfile
保存的数据,并按照您选择的方式导出到Excel

对于
postfile
,可以在循环中分析数据,而不是使用
by
bysort

假设数据运行的年份为2005-2014年,以下是示例代码:

/*make sure no postfile is open, in case a previous run did not close the file*/
cap postclose ci_results

/*create the postfile that will store results*/
postfile ci_results year mean lowerCI upperCI using ci_results.dta, replace

/*loop through years*/
forval y = 2004/2014 {
    ci dscomplete_binary if year==`y', binomial wilson level(95)
        /*store saved results from ci to postfile.  Make sure the post statement contains results in the same order stated in postfile command.*/
    post (`y') (r(mean)) (r(lb)) (r(ub))
}

/*close the postfile once you've looped through all the cases of interest*/
postclose ci_results
use ci_results.dta, clear

一旦将ci_results.dta数据加载到内存中,您就可以应用任何您喜欢的Excel导出命令。

这是对使用
statsby
的建议的发展。对它的反对意见相当令人费解,因为很容易回到原始数据集。重新加载数据集需要一些机器时间,但在寻找替代方法时,个人花费了多少时间

由于缺少我们可以使用的数据集,我提供了一个可复制的示例

如果你想重复这样做,你会写一个更详细的程序来做,这就是这个论坛的全部内容

我把如何将结果导出到Excel留给了那些如此倾向于这样做的人:在任何情况下都没有提供想要什么的细节

. sysuse auto, clear 
(1978 Automobile Data)

. preserve 

. statsby mean=r(mean) ub=r(ub) lb=r(lb), by(rep78) : ci foreign, binomial wilson level(95)  
(running ci on estimation sample)

      command:  ci foreign, binomial wilson
         mean:  r(mean)
           ub:  r(ub)
           lb:  r(lb)
           by:  rep78

Statsby groups
----+--- 1 ---+--- 2 ---+--- 3 ---+--- 4 ---+--- 5 
.....

. list 

     +----------------------------------------+
     | rep78       mean         ub         lb |
     |----------------------------------------|
  1. |     1          0   .6576198          0 |
  2. |     2          0   .3244076          0 |
  3. |     3         .1   .2562108   .0345999 |
  4. |     4         .5   .7096898   .2903102 |
  5. |     5   .8181818   .9486323   .5230194 |
     +----------------------------------------+

. restore 

. describe 

descripe
结果将表明我们回到了起点

这是对已经提出的使用
statsby
的建议的发展。对它的反对意见相当令人费解,因为很容易回到原始数据集。重新加载数据集需要一些机器时间,但在寻找替代方法时,个人花费了多少时间

由于缺少我们可以使用的数据集,我提供了一个可复制的示例

如果你想重复这样做,你会写一个更详细的程序来做,这就是这个论坛的全部内容

我把如何将结果导出到Excel留给了那些如此倾向于这样做的人:在任何情况下都没有提供想要什么的细节

. sysuse auto, clear 
(1978 Automobile Data)

. preserve 

. statsby mean=r(mean) ub=r(ub) lb=r(lb), by(rep78) : ci foreign, binomial wilson level(95)  
(running ci on estimation sample)

      command:  ci foreign, binomial wilson
         mean:  r(mean)
           ub:  r(ub)
           lb:  r(lb)
           by:  rep78

Statsby groups
----+--- 1 ---+--- 2 ---+--- 3 ---+--- 4 ---+--- 5 
.....

. list 

     +----------------------------------------+
     | rep78       mean         ub         lb |
     |----------------------------------------|
  1. |     1          0   .6576198          0 |
  2. |     2          0   .3244076          0 |
  3. |     3         .1   .2562108   .0345999 |
  4. |     4         .5   .7096898   .2903102 |
  5. |     5   .8181818   .9486323   .5230194 |
     +----------------------------------------+

. restore 

. describe 

descripe
结果将表明我们回到了起点

您是否考虑过使用
statsby:
前缀,如
help ci
所建议的,而不是
bysort year:
?是的,正如前面提到的,我确实这样做了,但是我的statsby命令的问题是它会清除Stata中的内存,这意味着我必须重新打开它,而且因为我使用的数据集非常大,这不是很有帮助。我想在保留原始数据集的同时执行此操作,以便在执行ci命令后恢复它。那么使用
preserve
&
restore
如何?我不能像使用statsby命令一样,它会清除数据集的内存,这就是我的问题所在。@radek建议使用
preserve
restore
对我来说似乎完全合理;这些命令的目的是让您尽可能轻松地获得原始数据。序列将是
preserve
-
statsby
-
restore
。您是否考虑过使用
statsby:
前缀,如
help ci
所建议的,而不是
bysort year:
?是的,如前所述,我确实这样做了,但statsby命令的问题是它会从Stata中清除内存,这意味着我必须重新打开它,因为我使用的数据集非常大,这不是很有帮助。我想在保留原始数据集的同时执行此操作,以便在执行ci命令后恢复它。那么使用
preserve
&
restore
如何?我不能像使用statsby命令一样,它会清除数据集的内存,这就是我的问题所在。@radek建议使用
preserve
restore
对我来说似乎完全合理;这些命令的目的是让您尽可能轻松地获得原始数据。顺序是
preserve
--
statsby
--
restore
。很抱歉,我在进入preserve之前删除了一些变量,因此当我尝试使用statsby命令时