我使用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;将是奖励)?
答案 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)\\