使用esttab时,为什么keep()子选项不适用于所有变量?

时间:2016-07-31 12:43:37

标签: latex stata

我使用Stata命令esttab将一些列表输出转换为Latex格式。我想在表格的最后一行中包括每列中的观察总数。我使用keep blist子选项遇到了问题。有时保持按预期执行。有时它什么都不做。

我在statalist上发现了以下内容,这对我来说可能与coeflist和varlist之间的区别有关,但我不认为这是问题所在。 http://www.statalist.org/forums/forum/general-stata-discussion/general/131816-using-factor-variables-in-estimates-table-keep

这是一个可重复的例子。

clear all
sysuse auto

gen big=(weight>3000)
label define Big 0 "Not in Big Set" 1 "In Big Set"
label values big Big
label variable big "Is Item Found in Big Set?"
compress big  //want it to be byte to match my real data

estpost tabulate big foreign

esttab using myfilename.tex, replace f ///
cell(colpct(fmt(2)) b(fmt(g) par keep(Total))) ///
collabels(none) unstack noobs nonumber nomtitle    ///
eqlabels(, lhs("Size Category"))                     ///
varlabels(, blist(Total "\hline "))

estpost tabulate rep78 foreign

esttab using myfilename2.tex, replace f ///
cell(colpct(fmt(2)) b(fmt(g) par keep(Total))) ///
collabels(none) unstack noobs nonumber nomtitle    ///
eqlabels(, lhs("Repair Rec."))                     ///
varlabels(, blist(Total "\hline "))

乳胶输出在第一种情况下看起来像这样:

Size Category&    Domestic&     Foreign&       Total\\
\hline
Not in Big Set&       28.85&       90.91&       47.30\\
            &        (15)&        (20)&        (35)\\
In Big Set  &       71.15&        9.09&       52.70\\
            &        (37)&         (2)&        (39)\\
\hline Total       &      100.00&      100.00&      100.00\\
            &        (52)&        (22)&        (74)\\

在第二种情况下看起来像这样(正确):

Repair Rec. &    Domestic&     Foreign&       Total\\
\hline
1           &        4.17&        0.00&        2.90\\
2           &       16.67&        0.00&       11.59\\
3           &       56.25&       14.29&       43.48\\
4           &       18.75&       42.86&       26.09\\
5           &        4.17&       42.86&       15.94\\
\hline Total       &      100.00&      100.00&      100.00\\
        &        (48)&        (21)&        (69)\\

我还认为它可能与我的存储类型有关,但在第一个版本之前添加recast int big并没有解决它。

为什么keep只在这些案件中合作?怎么修好?

或者是否有另一种解决方法来实现我在最后一行中出现的每一列中的观察数量的目标(标记它们"观察数量和#34;将是奖励)?

2 个答案:

答案 0 :(得分:1)

我向esttab程序集的开发人员指出了这个讨论,因为他在Stack Overflow上没有活跃。他回答了以下内容,建议我代表他在此发布,我很乐意为这个问题提供全面的解决方案。

这似乎是一个错误。特定于元素的keep()选项 - 即keep()中的cells() - 似乎不适用于包含空格的系数名称。解决方法是将elabels选项与estpost tabulate一起使用。这可以防止estpost tabulate尝试从标签中构造系数名称。相反,它使用值并将标签存储在e(labels)中,如果是双向表,则存储在e(eqlabels)中。然后可以在estout中使用这些宏来打印标签。这是一个例子:

. clear all

. sysuse auto
(1978 Automobile Data)

. gen big=(weight>3000)

. label define Big 0 "Not in Big Set" 1 "In Big Set"

. label values big Big

. label variable big "Is Item Found in Big Set?"

. estpost tabulate big foreign, elabels

foreign      |                                            
         big |      e(b)     e(pct)  e(colpct)  e(rowpct)
-------------+--------------------------------------------
0            |                                            
           0 |        15   20.27027   28.84615   42.85714
           1 |        37         50   71.15385   94.87179
       Total |        52   70.27027        100   70.27027
-------------+--------------------------------------------
1            |                                            
           0 |        20   27.02703   90.90909   57.14286
           1 |         2   2.702703   9.090909   5.128205
       Total |        22   29.72973        100   29.72973
-------------+--------------------------------------------
Total        |                                            
           0 |        35    47.2973    47.2973        100
           1 |        39    52.7027    52.7027        100
       Total |        74        100        100        100

row labels saved in macro e(labels)
column labels saved in macro e(eqlabels)

. esttab, tex fragment ///
>     cell(colpct(fmt(2)) b(fmt(g) par keep(Total))) ///
>     collabels(none) unstack noobs nonumber nomtitle ///
>     eqlabels(`e(eqlabels)', lhs("Size Category")) ///
>     varlabels(`e(labels)', blist(Total "\hline "))

Size Category&    Domestic&     Foreign&       Total\\
\hline
Not in Big Set&       28.85&       90.91&       47.30\\
In Big Set  &       71.15&        9.09&       52.70\\
\hline Total       &      100.00&      100.00&      100.00\\
            &        (52)&        (22)&        (74)\\

答案 1 :(得分:0)

好吧,多亏了威廉的好心情,我想出了这个解决方案。关于为什么原始代码不起作用,我仍然处于黑暗中,但是这里有一种方法可以从keep获得所需的输出,并使用varlabels来解决变量标签丢失的问题。

clear all
sysuse auto

gen big=(weight>3000)
label variable big "Is Item Found in Big Set?"
compress big  //want it to be byte to match my real data

estpost tabulate big foreign

esttab using myfilename.tex, replace f ///
cell(colpct(fmt(2)) b(fmt(g) par keep(Total))) ///
collabels(none) unstack noobs nonumber nomtitle    ///
eqlabels(, lhs("Size Category"))                     ///
varlabels(0 "Not in Big Set" 1 "In Big Set", blist(Total "\hline "))

这会产生:

Size Category&    Domestic&     Foreign&       Total\\
\hline
Not in Big Set&       28.85&       90.91&       47.30\\
In Big Set  &       71.15&        9.09&       52.70\\
\hline Total       &      100.00&      100.00&      100.00\\
            &        (52)&        (22)&        (74)\\