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
-------------------
注意:其他策略有时在这里更好或一样好。
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)