【问题标题】:Stata: Combine summary statistics into one column using esttabStata:使用 esttab 将汇总统计信息合并为一列
【发布时间】:2021-12-10 13:50:25
【问题描述】:

我正在尝试将以下变量的汇总统计信息计算到 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

. 

我想要的是两列:一列用于平均值,一列用于标准差,即不是 8 个单独的列。我对esttab 不熟悉,所以这对于普通的Stata 用户来说似乎很明显。我会很感激你的建议。

【问题讨论】:

标签: latex stata summary tabulate


【解决方案1】:

我个人不使用esttab,但您的数据似乎很适合重新整形。这样做将不再需要 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
----------------------------------------------

【讨论】:

  • 感谢您的回答。不幸的是,当我运行您的代码时,我得到一个空表。这可能是因为Stata版本吗?另外,我认为您没有完全正确地获得 q56_save 假人。我包含了我的一些数据(很抱歉一开始没有这样做)。
  • Stata 版本在这里不太可能成为问题。
  • 您的 q56_save 假人的形式对于该方法并不重要。只要它们有时等于 1。你是否改变了mean(fmt(2)) sd(fmt(2)) 的大小写,正如我所展示的那样?如果保留全部小写,这将导致一个空表。
  • 如果我将 Mean(fmt(2)) SD(fmt(2)) 更改为 mean(fmt(2)) sd(fmt(2)) 表格不再是空的,反之亦然。不过谢谢你的提示。并感谢您的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多