Stata:使用esttab将汇总统计信息合并到一列中

Stata: Combine summary statistics into one column using esttab

我正在尝试将以下变量的汇总统计信息计算到 Stata 中的一列中。

eststo: quietly estpost sum q58_amount_1 if wave == 1 & q56_save1 == 1
eststo: quietly estpost sum q58_amount_2 if wave == 1 & q56_save2 == 1
eststo: quietly estpost sum q58_amount_3 if wave == 1 & q56_save3 == 1
eststo: quietly estpost sum q58_amount_4 if wave == 1 & q56_save4 == 1
esttab, replace cells("mean(fmt(2)) sd(fmt(2))") label title(Savings II) noobs
eststo clear

q58_amount_1 - 4 是不同选项的储蓄金额(例如使用银行账户、将钱放在床垫下等)。 q56_save1 == 1 表示给定的选项确实有积极的节省。 wave表示时间段。

这是一些示例数据

     | id   wave   q58_~t_1   q58_~t_2   q58_~t_3   q58_~t_4   q56_sa~1   q56_sa~2   q56_sa~3   q56_sa~4 |
     |---------------------------------------------------------------------------------------------------|
  1. |  1      1          0    1020000          0          0          0          1          0          0 |
  2. |  1      2      60000     380000          0          0          1          1          0          0 |
  3. |  2      1          0      50000          0          0          0          1          0          0 |
  4. |  2      2          0    1500000          0      15000          0          1          0          1 |
  5. |  3      1          0          0          0     150000          0          0          0          1 |
     |---------------------------------------------------------------------------------------------------|
  6. |  3      2     200000          0      30000      11000          1          0          1          1 |
  7. |  4      1          0          0          0          0          0          0          0          0 |
  8. |  4      2          0     220000      40000      20000          0          1          1          1 |
  9. |  5      1     200000          0          0          0          1          0          0          0 |
 10. |  5      2          0          0          0          0          0          0          0          0 |
     |---------------------------------------------------------------------------------------------------|
 11. |  6      1          0     100000          0      10000          0          1          0          1 |
 12. |  6      2          0          0          0     300000          0          0          0          1 |
 13. |  7      1          0    3000000     700000          0          0          1          1          0 |
 14. |  7      2     500000          0    1500000          0          1          0          1          0 |
 15. |  8      1      60000     320000          0          0          1          1          0          0 |
     |---------------------------------------------------------------------------------------------------|
 16. |  8      2          0     350000          0          0          0          1          0          0 |
 17. |  9      1          0     250000          0          0          0          1          0          0 |
 18. |  9      2          .          .          .          .          .          .          .          . |
 19. | 10      1          0     200000          0          0          0          1          0          0 |
 20. | 10      2     130000     800000    1000000          0          1          1          1          0 |

使用上面的命令我得到以下输出:


Savings II
--------------------------------------------------------------------------------------------------------------------
> --------
                              (1)                       (2)                       (3)                       (4)     
>         
                                                                                                                    
>         
                             mean           sd         mean           sd         mean           sd         mean     
>       sd
--------------------------------------------------------------------------------------------------------------------
> --------
q58_amount_1            288669.40    987614.42                                                                      
>         
q58_amount_2                                      664938.81   1609076.48                                            
>         
q58_amount_3                                                               2448495.47   5439977.76                  
>         
q58_amount_4                                                                                          243138.35    5
> 33569.69
--------------------------------------------------------------------------------------------------------------------
> --------

. eststo clear

. 
end of do-file

. 

我想要的是两列:一列用于均值,一列用于 sd,即不是 8 个单独的列。我不熟悉 esttab 所以这对于 Stata 的普通用户来说似乎很明显。如果能给我一些建议,我将不胜感激。

我个人并不使用 esttab,但您的数据似乎很适合重新整形为 long。这样做将不需要 4 个单独的 estpost 调用。

示例数据ps。请在将来包含一个可重现的示例

这里我假设 q56_save{i} 是二进制的,也是 2 波。

clear all
set obs 100

forval i = 1/4 {
    gen q58_amount_`i' = rnormal()
    gen q56_save`i' = mod(_n,`i'+1)
    replace q56_save`i' = 0 if q56_save`i' > 1
}
gen wave = _n < _N/2

整形和esttab

注意这里我用 tabstat 代替了 summarize

gen row_id = _n
reshape long q56_save q58_amount_, i(wave row_id) j(q)
gen str_quarter = "q58_amount_" + string(q)

* add "nototal" option to suppress Total line
eststo: quietly estpost tabstat q58_amount if wave == 1 & q56_save == 1, s(mean sd) by(str_quarter) 
esttab, replace cells("Mean(fmt(2)) SD(fmt(2))") label title(Savings II) noobs

Savings II
----------------------------------------------
                              (1)             
                                              
                             Mean           SD
----------------------------------------------
q58_amount_1                 0.62         0.98
q58_amount_2                -0.04         1.19
q58_amount_3                 0.40         0.90
q58_amount_4                -0.07         0.91
Total                        0.30         1.04
----------------------------------------------