【问题标题】:Stata tabstat change order/sort?Stata tabstat 更改顺序/排序?
【发布时间】:2014-09-23 00:56:43
【问题描述】:

我在 Stata 中使用 tabstat,并使用 estpostesttab 将其输出到 LaTeX。我有

tabstat

按组显示统计信息。例如,

tabstat assets, by(industry) missing statistics(count mean sd p25 p50 p75) 

我的问题是tabstat(或其他Stata命令)是否有办法显示按均值排序的输出,以便那些具有更高均值的类别位于顶部。默认情况下,当我使用tabstat 时,Stata 按字母顺序显示industry

【问题讨论】:

    标签: statistics latex output stata summary


    【解决方案1】:

    tabstat 没有提供这样的钩子,但是有一种解决此类问题的通用方法,而且很容易理解。

    您没有提供可重现的示例,因此我们需要一个:

    . sysuse auto, clear
    (1978 Automobile Data)
    
    . gen Make = word(make, 1)
    
    . tab Make if foreign
    
           Make |      Freq.     Percent        Cum.
    ------------+-----------------------------------
           Audi |          2        9.09        9.09
            BMW |          1        4.55       13.64
         Datsun |          4       18.18       31.82
           Fiat |          1        4.55       36.36
          Honda |          2        9.09       45.45
          Mazda |          1        4.55       50.00
        Peugeot |          1        4.55       54.55
        Renault |          1        4.55       59.09
         Subaru |          1        4.55       63.64
         Toyota |          3       13.64       77.27
             VW |          4       18.18       95.45
          Volvo |          1        4.55      100.00
    ------------+-----------------------------------
          Total |         22      100.00
    

    Make 这里就像你的变量industry:它是一个字符串变量,所以在表格中,Stata 会倾向于按字母(字母数字)顺序显示它。

    解决方法有几个简单的步骤,有些是可选的。

    计算要排序的变量。egen 在这里通常很有用。

     . egen mean_mpg = mean(mpg), by(Make)
    

    将这些值映射到具有不同整数值的变量。由于两个组可能具有相同的平均值(或其他汇总统计量),因此请确保您打破原始字符串变量的关系。

     . egen group = group(mean_mpg Make)
    

    创建此变量时,平均值(或其他汇总统计量)最低的组的值为 1,次低的组值为 2,依此类推。如果需要相反的顺序,就像在这个问题中一样,翻转分组变量。

     . replace group = -group
     (74 real changes made)
    

    这个新变量有一个问题:原始字符串变量的值,这里是Make,无处可见。 labmask(在search labmask 之后从Stata Journal 网站安装)是这里的助手。 我们使用原始字符串变量的值作为新变量的值标签。(想法是值标签成为整数变量佩戴的“面具”。)

     . labmask group, values(Make)
    

    (可选)处理新整数变量的变量标签。

     . label var group "Make"
    

    现在我们可以使用新变量的类别来制表。

     . tabstat mpg if foreign, s(mean) by(group) format(%2.1f)
    
     Summary for variables: mpg
     by categories of: group (Make)
    
       group |      mean
     --------+----------
      Subaru |      35.0
       Mazda |      30.0
          VW |      28.5
       Honda |      26.5
     Renault |      26.0
      Datsun |      25.8
         BMW |      25.0
      Toyota |      22.3
        Fiat |      21.0
        Audi |      20.0
       Volvo |      17.0
     Peugeot |      14.0
     --------+----------
       Total |      24.8
     -------------------
    

    注意:其他策略有时在这里更好或一样好。

    • 如果你collapse你的数据到一个新的数据集,那么你可以随意sort它。

    • graph bargraph dot 擅长显示分组的汇总统计信息,并且可以直接调整排序顺序。

    2021 年 10 月 3 日和 5 日更新 来自 SSC 和 Stata 日志 的新辅助命令 myaxis(请参阅 [paper here)将此处的示例压缩为 tabstat

    * set up data example 
    sysuse auto, clear
    gen Make = word(make, 1)
    
    * sort order variable and tabulation 
    myaxis Make2 = Make, sort(mean mpg) descending 
    tabstat mpg if foreign, s(mean) by(Make2) format(%2.1f)
    

    【讨论】:

    • 感谢您的回答。坦率地说,这(不是责怪你)很疯狂——Stata 的日常用户是否一直在做这种事情只是为了对表格的输出进行排序?似乎只是将其处理到 Excel 中并在那里执行更安全、更快且不易出错。
    • 不适合我。我不经常使用 Excel。答案集中在 7 年前的具体问题上。
    • 感谢您的回复。我只是很惊讶没有找到更好的答案。我知道 Stata 有着悠久的历史,作为“程序员朋友”,我试图在一些事情上帮助某人,但有时会因为我无法做的简单事情而感到非常惊讶。在 SQL 中,我只需添加 ORDER BY mean DESC 即可!
    • 我将添加一个更新,提到一个新的辅助命令。
    • tabstat 是一个比较老的命令,当然,任何使用它的人都可能希望这更容易。但是一种更现代的方法(实际上是古老的,因为 collapsecontract 是一些老式的命令)是生成一个结果表作为简化的数据集,然后 sort 随心所欲。 2014 年的答案必然没有提到框架(Stata 16)作为另一种方法。
    【解决方案2】:

    我会查看 SSC 上的 egenmore 包。您可以通过输入 Stata ssc install egenmore 来获取该包。特别是,我会在egenmore 的帮助文件中查看axis() 的条目。其中包含一个完全符合您要求的示例。

    【讨论】:

    • 请注意,Maarten 的回答与我的实际上相同,因为 axis() 背后的主要思想是根据其他一些变量的定量值对类别进行排序(并且还只要我写的)。我更长的答案阐明了整个逻辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 2020-11-24
    • 1970-01-01
    相关资源
    最近更新 更多