在Stata和esttab中,我如何“对齐”多个双向制表?

时间:2013-02-27 19:29:59

标签: stata

我正在尝试准备一个显示多个变量的双向频率表的表。 逻辑是每个变量将由相同的二进制指示符制表。

我想使用estout系列命令将输出发送到tex文件。但是,每个交叉表都会出现在新列中。

使用简单的例子

sysuse auto
eststo clear 
eststo: estpost tab headroom foreign, notot
eststo: estpost tab trunk foreign, notot
esttab, c(b) unstack wide collabels(N)

给我一​​个输出

----------------------------------------------------------------
                      (1)                       (2)             

                 Domestic      Foreign     Domestic      Foreign
                        N            N            N            N
----------------------------------------------------------------
1_missing_5             3            1                          
2                      10            3                          
2_missing_5             4           10                          
3                       7            6                          
3_missing_5            13            2                          
4                      10            0                          
4_missing_5             4            0                          
5                       1            0            0            1
6                                                 0            1
7                                                 3            0
8                                                 2            3
9                                                 3            1
10                                                3            2
11                                                4            4
12                                                1            2
13                                                4            0
14                                                1            3
15                                                2            3
16                                               10            2
17                                                8            0
18                                                1            0
20                                                6            0
21                                                2            0
22                                                1            0
23                                                1            0
----------------------------------------------------------------
N                      74                        74             
----------------------------------------------------------------

有没有办法'对齐'输出,只有两列 - 国内和国外?

2 个答案:

答案 0 :(得分:3)

要产生所需的输出,需要将结果堆叠在一起。

首先定义程序append_tabs,它是Ben Jann的用于堆叠模型的程序appendmodels的快速修改版本:

program append_tabs, eclass
    version 8
    syntax namelist
    tempname b tmp
    local i 0
    foreach name of local namelist {
        qui est restore `name'
        foreach x in Domestic Foreign {
            local ++i
            mat `tmp'`i' = e(b)
            mat li `tmp'`i'
            mat `tmp'`i' = `tmp'`i'[1,"`x':"]
            local cons = colnumb(`tmp'`i',"_cons")
            if `cons'<. & `cons'>1 {
                mat `tmp'`i' = `tmp'`i'[1,1..`cons'-1]
            }
            mat li `tmp'`i'
            mat `b'`i' = `tmp'`i''
            mat li `b'`i'    
        }
    }
    mat `b'D = `b'1 \ `b'3
    mat `b'F = `b'2 \ `b'4
    mat A = `b'D , `b'F
    ereturn matrix results = A
    eret local cmd "append_tabs"
end

接下来运行您的表格并使用append_tabs堆积其结果:

sysuse auto, clear
estimates store clear

estpost tabulate headroom foreign, notot
estimates store one 

estpost tabulate trunk foreign, notot
estimates store two

append_tabs one two

最后,查看结果:

esttab e(results), nonumber mlabels(none) eqlabels(none) collabels("Domestic" "Foreign")

--------------------------------------
                 Domestic      Foreign
--------------------------------------
1_missing_5             3            1
2                      10            3
2_missing_5             4           10
3                       7            6
3_missing_5            13            2
4                      10            0
4_missing_5             4            0
5                       1            0
5                       0            1
6                       0            1
7                       3            0
8                       2            3
9                       3            1
10                      3            2
11                      4            4
12                      1            2
13                      4            0
14                      1            3
15                      2            3
16                     10            2
17                      8            0
18                      1            0
20                      6            0
21                      2            0
22                      1            0
23                      1            0
--------------------------------------

使用tex命令中的esttab选项查看LaTeX输出。

答案 1 :(得分:1)

如果您要输出到tex文件,一种解决方案是使用append的{​​{1}}选项。所以在你的情况下它会是这样的:

esttab

我相信也可能有一个更优雅的解决方案,但这通常很容易实现。在sysuse auto eststo clear estpost tab headroom foreign, notot eststo tab1 estpost tab trunk foreign, notot eststo tab2 esttab tab1 using outputfile.tex, c(b) unstack wide collabels(N) replace esttab tab2 using outputfile.tex, c(b) unstack wide collabels(N) append 时,您可能需要指定一系列选项来删除各种列标题(我相信append的默认值假设您不需要大多数标题,因此可能值得研究estout而不是estout)。