【问题标题】:Stata estpost esttab: Generate table with mean of variable split by year and groupStata estpost esttab:生成按年份和组划分的变量平均值表
【发布时间】:2013-11-29 19:37:39
【问题描述】:

我想用 estout 包在 Stata 中创建一个表,以有效地显示变量分成两组(年份和二进制指标)的平均值。

我找到了一个解决方案,就是通过生成新变量,手动将主变量cash_at分成2组,例如现金_at1 和现金_at2。然后,我可以使用 tabstat 生成汇总统计数据并使用 esttab 获取输出。

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

链接到当前结果:http://imgur.com/2QytUz0

但是,我更喜欢水平表(例如 x 轴上的年份)和一种无需手动拆分组的方法 - 有没有办法做到这一点?

【问题讨论】:

    标签: stata


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      • 1970-01-01
      • 2019-12-05
      相关资源
      最近更新 更多