首页 文章

使用esttab按组生成汇总统计信息,其中包含平均差异和显着性的列

提问于
浏览
7

我想使用 esttabssc install estout )按组生成汇总统计信息,其中包含平均差异和显着性的列 . 使用 estpostsummarizettest 生成这两个单独的表很容易,并且手动组合,但我想自动完成整个过程 .

以下代码生成所需表的两个组件 .

sysuse auto, clear

* summary statistics by group
eststo clear
by foreign: eststo: quietly estpost summarize ///
    price mpg weight headroom trunk
esttab, cells("mean sd") label nodepvar   

* difference in means
eststo: estpost ttest price mpg weight headroom trunk, ///
    by(foreign) unequal 
esttab ., wide label

我可以打印两张 table 并将其粘贴到一张 table 上 .

* can generate similar tables and append horizontally
esttab, cells("mean sd") label
esttab, wide label


* manual, cut-and-paste solution
-------------------------------------------------------------------------------------------------------
                              (1)                       (2)                         (3)                

                             mean           sd         mean           sd         
-------------------------------------------------------------------------------------------------------
Price                    6072.423     3097.104     6384.682     2621.915         -312.3         (-0.44)
Mileage (mpg)            19.82692     4.743297     24.77273     6.611187         -4.946**       (-3.18)
Weight (lbs.)            3317.115     695.3637     2315.909     433.0035         1001.2***       (7.50)
Headroom (in.)           3.153846     .9157578     2.613636     .4862837          0.540**        (3.30)
Trunk space (.. ft.)        14.75     4.306288     11.40909     3.216906          3.341***       (3.67)
-------------------------------------------------------------------------------------------------------
Observations                   52                        22                          74                
-------------------------------------------------------------------------------------------------------
t statistics in parentheses
* p<0.05, ** p<0.01, *** p<0.001

似乎我应该能够通过一个 esttab 调用获得所需的表,而不需要剪切和粘贴,但我无法弄明白 . 有没有办法生成所需的表而无需手动切割和粘贴?

我宁愿输出一个LaTeX表,但任何消除剪切和粘贴的东西都是一大步,甚至是通过分隔的文本文件 .

3 回答

  • 3

    如果你仍然想使用esttab,你可以使用单元格和模式 . 可以使用以下代码复制原始帖子中的表:

    sysuse auto, clear
    
    eststo domestic: quietly estpost summarize ///
        price mpg weight headroom trunk if foreign == 0
    eststo foreign: quietly estpost summarize ///
        price mpg weight headroom trunk if foreign == 1
    eststo diff: quietly estpost ttest ///
        price mpg weight headroom trunk, by(foreign) unequal
    
    esttab domestic foreign diff, ///
    cells("mean(pattern(1 1 0) fmt(2)) sd(pattern(1 1 0)) b(star pattern(0 0 1) fmt(2)) t(pattern(0 0 1) par fmt(2))") ///
    label
    

    产量

    -----------------------------------------------------------------------------------------------------
                                  (1)                       (2)                       (3)                
    
                                 mean           sd         mean           sd            b               t
    -----------------------------------------------------------------------------------------------------
    Price                     6072.42      3097.10      6384.68      2621.92      -312.26         (-0.44)
    Mileage (mpg)               19.83         4.74        24.77         6.61        -4.95**       (-3.18)
    Weight (lbs.)             3317.12       695.36      2315.91       433.00      1001.21***       (7.50)
    Headroom (in.)               3.15         0.92         2.61         0.49         0.54**        (3.30)
    Trunk space (.. ft.)        14.75         4.31        11.41         3.22         3.34***       (3.67)
    -----------------------------------------------------------------------------------------------------
    Observations                   52                        22                        74                
    -----------------------------------------------------------------------------------------------------
    
  • 1

    我没有 esttabesttabestout 包来自 ssc )这样做,但我有 listtab (也是 ssc )和 postfile 的解决方案 . 这里的表与我上面提到的表略有不同,但是这种方法足够通用,你可以修改它以满足你的需要 .

    此解决方案还使用LaTeX的 booktabs 包 .

    /* data and variables */
    sysuse auto, clear
    local vars price mpg weight headroom trunk
    
    /* means */
    tempname postMeans
    tempfile means
    postfile `postMeans' ///
        str100 varname domesticMeans foreignMeans pMeans using "`means'", replace
    foreach v of local vars {
        local name: variable label `v'
        ttest `v', by(foreign)
        post `postMeans' ("`name'") (r(mu_1)) (r(mu_2)) (r(p))
    }
    postclose `postMeans'
    
    /* medians */
    tempname postMedians
    tempfile medians
    postfile `postMedians' ///
        domesticMedians foreignMedians pMedians using `medians', replace
    foreach v of local vars {
        summarize `v' if !foreign, detail
        local med1 = r(p50)
        summarize `v' if foreign, detail
        local med2 = r(p50)
        ranksum `v', by(foreign)
        local pval = 2 * (1 - normal(abs(r(z))))
        post `postMedians' (`med1') (`med2') (`pval')
    }
    postclose `postMedians'
    
    /* combine */
    use `means'
    merge 1:1 _n using `medians', nogenerate
    format *Means *Medians %9.3gc
    list
    
    /* make latex table */
    /* requires LaTeX package `booktabs` */
    listtab * using "Table.tex", ///
        rstyle(tabular) replace ///
        head("\begin{tabular}{lcccccc}" ///
        "\toprule" ///
        "& \multicolumn{3}{c}{Means} & \multicolumn{3}{c}{Medians} \\" ///
        "\cmidrule(lr){2-4} \cmidrule(lr){5-7}" ///
        "& Domestic & Foreign & \emph{p} & Domestic & Foreign & \emph{p}\\" ///
        "\midrule") ///
        foot("\bottomrule" "\end{tabular}")
    

    这产生以下结果 .

    enter image description here

  • 8

    选择的答案很好,但有点减少 . 只有estpost ttest才能达到相同的效果 .

    sysuse auto, clear
    estpost ttest price mpg weight headroom trunk, by(foreign)
    esttab, cells("mu_1 mu_2 b(star)"
    

    输出如下所示:

    mu_1          mu_2         b   
    
    c_score     43.33858    42.034       1.30458***
    nc_a4_17    4.007524    3.924623    .0829008*
    

相关问题