在这些情况下,我的偏好是将 year 放在行中,将统计信息(例如平均值)放在列中,但如果你想反过来做,应该没有问题.
对于像您想要的那样的表,拥有您已经提到的二进制变量(我将其命名为 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")
可用于您在原始帖子中提供的表格。确实,您有两个额外的行和变量,但它们可能是无害的。我同意这样的想法,一般来说,一旦你的程序运行得当,效率就是你担心的事情。当然,除非缺少它会阻止您达到那种状态。