首页 文章

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

提问于
浏览
1

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

我找到了一个解决方案,即通过生成新变量,例如将主变量cash_at分成两组 . 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 回答

  • 3

    在这些情况下我的偏好是 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")
    

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

相关问题