Stata tabstat change order/sort?

Stata tabstat change order/sort?

提问人:rajvijay 提问时间:9/23/2014 最后编辑:Nick Coxrajvijay 更新时间:10/5/2021 访问量:9365

问:

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

tabstat

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

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

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

统计学 乳胶 输出 斯塔塔 总结

评论


答:

5赞 Maarten Buis 9/23/2014 #1

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

评论

3赞 Nick Cox 7/23/2016
请注意,Maarten 的答案实际上与我的相同,因为背后的主要思想是根据其他一些变量的定量值对类别进行排序(就我写的而言也是如此)。我更长的回答阐明了整个逻辑。axis()
6赞 Nick Cox 9/23/2014 #2

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这里就像你的变量:它是一个字符串变量,所以在表格中,Stata倾向于按字母(字母数字)顺序显示它。industry

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

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

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

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

 . egen group = group(mean_mpg Make)

创建此变量时,对于具有最低均值(或其他汇总统计量)的组,该变量的值为 1,对于下一个最低值的组,值为 2,依此类推。如果需要相反的顺序,如本题所示,请翻转分组变量。

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

这个新变量存在一个问题:原始字符串变量的值(此处)无处可寻。 (从Stata Journal网站安装后)是这里的帮手。我们使用原始字符串变量的值作为新变量的值标签。(这个想法是,值标签成为整数变量佩戴的“掩码”。Makelabmasksearch labmask

 . 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
 -------------------

注意:其他策略有时更好或同样好。

  • 如果你的数据到一个新的数据集,你可以随心所欲地使用它。collapsesort

  • graph bar并且善于显示组的汇总统计,排序顺序可以直接调。graph dot

2021 年 10 月 3 日和 5 日更新:SSC 和 Stata Journal 的新帮助程序命令(参见 [论文 此处])将此处的示例压缩为:myaxistabstat

* 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)

评论

0赞 Simon_Weaver 10/3/2021
谢谢你的回答。坦率地说,这(不怪你)很疯狂——Stata 的日常用户一直在做这种事情只是为了对表格的输出进行排序吗?似乎只是将其复制到 Excel 中并在那里执行它更安全、更快且更不容易出错。
0赞 Nick Cox 10/3/2021
不适合我。我不经常使用 Excel。答案集中在7年前的具体问题上。
0赞 Simon_Weaver 10/3/2021
感谢您的回复。我只是惊讶于没有找到更好的答案。我知道 Stata 有着悠久的历史,作为“程序员朋友”,我试图帮助别人做一些事情,但有时对我做不到的简单事情感到非常惊讶。在 SQL 中,我只需添加,仅此而已!ORDER BY mean DESC
0赞 Nick Cox 10/3/2021
我将添加一个更新,其中提到了一个新的帮助程序命令。
0赞 Nick Cox 10/3/2021
tabstat是一个中等老旧的命令,当然,任何使用它的人都可能希望这更容易。但一种更现代的方法(事实上,古代的,作为和是某个年份的命令)是生成一个结果表作为简化的数据集,然后生成任何你想要的。2014年的答案必然没有提到框架(Stata 16)作为另一种方法。collapsecontractsort