Stata estpost esttab:生成具有按年份和组划分的变量均值的表

时间:2013-11-29 19:37:40

标签: stata

我想在Stata中使用estout包创建一个表,以有效的方式显示由2组(年份和二元指示符)拆分的变量的平均值。

我找到了一个解决方案,即通过生成新变量,例如将主变量cash_at分成2组。 cash_at1和cash_at2。然后,我可以使用tabstat生成摘要统计信息,并使用esttab获取输出。

estpost tabstat cash_at1 cash_at2, stat(mean) by(year)
esttab, cells("cash_at1 cash_at2")

指向当前结果的链接:http://imgur.com/2QytUz0

但是,我更喜欢水平表(例如x轴上的年份)以及一种不用手分割组的方法 - 是否有办法这样做?

1 个答案:

答案 0 :(得分:4)

我在这些情况下的偏好是在行中以及列中的统计数据(例如平均值),但如果您想以相反的方式执行此操作,则应该没有问题

对于像你想要的那样的表来说,你已经提到的二进制变量(我将其命名为 flag )和适当的标签就足够了。您可以使用内置的table命令:

clear all
set more off

* Create example data
set seed 8642
set obs 40

egen year = seq(), from(1985) to (2005) block(4)
gen cash = floor(runiform()*500)
gen flag = round(runiform())
list, sepby(year)

* Define labels
label define lflag 0 "cash0" 1 "cash1"
label values flag lflag

* Table
table flag year, contents(mean cash)

通常,对于表,除estout模块外,您可能还需要考虑用户编写的命令tabout。运行ssc describe tabout以获取更多信息。

另一方面,“手工拆分”并不清楚你的意思。您没有显示此操作的代码,但只要它足够通用(并且实用),我认为您应该允许它。代码可能不像你希望的那样优雅,但如果它正在做它应该做的事情,我认为它没问题。例如:

clear all
set more off

set seed 8642
set obs 40

* Create example data
egen year = seq(), from(1985) to (2005) block(4)
gen cash = floor(runiform()*500)
gen flag = round(runiform())

* Data management
gen cash0 = cash if flag == 0
gen cash1 = cash if flag == 1

* Table
estpost tabstat cash*, stat(mean) by(year)
esttab, cells("cash0 cash1")

可以用于您在原始帖子中提供的表格。确实,你有两个额外的行和变量,但它们可能是无害的。我同意这样的想法:一般来说,一旦你的程序表现得恰当,你就会担心效率;当然,除非它缺乏阻止你达到那个状态。