2016-07-31 38 views
0

我正在使用Stata命令esttab將一些製表輸出轉換爲Latex形式。我想在表格最後一行的每列中包含觀察總數。我遇到過使用keep子選項blist的問題。有時保持按預期執行。有時它什麼都不做。使用esttab時,爲什麼keep()子選項不適用於所有變量?

我在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)\\ 

我還以爲它可能有與我的存儲類型有關,但在第一個estpost沒有修復之前添加recast int big

爲什麼keep只能在一個這樣的情況下工作?它如何被修復?

或者是否有另一種解決方法來實現我在最後一行出現的每列中的觀察值數目的目標(將它們標記爲「觀察次數」將成爲獎金)?

+1

由於我不知道'estout',我會做出這樣的評論:也許有人會看到沒有答案,並將提供明確的答案。由於你的優秀的可重現的例子,我能夠發現,在你試圖將'big'重鑄爲'int'的精神下,去掉'big'上的值標籤導致第一種情況現在與第二種情況匹配。祝你好運! – 2016-07-31 14:30:10

+0

感謝威廉!這太有趣了!我可以證實,這確實創造了我想要的效果與'保持'。但是,這導致了我現在沒有合理的行標籤的問題。我覺得這應該可以通過'eqlabels'選項解決,但我還沒有弄明白。 – Danielle

+0

當然我的意思是'varlabels' – Danielle

回答

1

我指出了這一點討論的esttab組程序的開發者,因爲他是不活躍的堆棧溢出。他回答如下,建議我代表他發表,我很樂意爲此提供全面解決方案。


這似乎是一個錯誤。特定元素keep()選項 - 即cells()中的keep() - 似乎不能與包含空格的係數名稱一起使用。解決方法是將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)\\ 
+0

哇,謝謝威廉!我已經放棄了爲什麼這不起作用的實際答案。 – Danielle

+1

作者隨後修正了2016年8月19日發佈給SSC 3.21版的錯誤。 – 2016-08-21 14:50:33

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)\\ 
+0

什麼仍然不起作用是使用b上的'label'子選項添加一個標籤... – Danielle

相關問題