创建3向百分比表

时间:2017-04-06 12:49:49

标签: stata percentage

我希望有一个3向表,使用三个分类变量显示列或行百分比。下面的命令给出了计数,但我找不到如何获得百分比。

XML::Twig

我如何获得百分比?

1 个答案:

答案 0 :(得分:0)

这个答案会显示一些错误的技巧。缺点是我不知道一个简单的方法来得到你所要求的。好处是所有这些技巧都易于理解并且通常很有用。

让我们使用你的例子,这是非常好的。

. sysuse nlsw88, clear 
(NLSW, 1988 extract)

提示#1您可以为自己计算百分比变量。我专注于%single。在此数据集中married是二进制的,因此我不会显示补充百分比。 计算完毕后,您可以(a)依赖于在用于定义它的组中它是恒定的这一事实(b)直接将其制表。我发现tabdisp被用户低估了。它被称为程序员的命令,但它根本不难使用。 tabdisp可让您即时设置显示格式;它没有任何危害,可能对其他命令使用format直接分配一个有用。

. egen pcsingle = mean(100 * (1 - married)), by(collgrad race)

. tabdisp collgrad race, c(pcsingle) format(%2.1f)

--------------------------------------
                 |        race        
college graduate | white  black  other
-----------------+--------------------
not college grad |  29.2   53.3   29.4
    college grad |  31.4   51.5   33.3
--------------------------------------

. format pcsingle %2.1f 

提示#2用户编写的命令groups提供了不同的灵活性。 groups可以从SSC安装(严格来说,必须安装在你可以使用之前)。它是各种表的包装器,但使用list作为显示引擎。

. * do this installation just once 
. ssc inst groups 

. groups collgrad race pcsingle 

  +-------------------------------------------------------+
  |         collgrad    race   pcsingle   Freq.   Percent |
  |-------------------------------------------------------|
  | not college grad   white       29.2    1217     54.19 |
  | not college grad   black       53.3     480     21.37 |
  | not college grad   other       29.4      17      0.76 |
  |     college grad   white       31.4     420     18.70 |
  |     college grad   black       51.5     103      4.59 |
  |-------------------------------------------------------|
  |     college grad   other       33.3       9      0.40 |
  +-------------------------------------------------------+

我们可以改进。我们可以使用特性设置更好的标题文本。 (实际上,这些可以比变量名更少受约束,但通常需要比变量标签更短。)我们可以通过调用标准list选项来使用分隔符。

. char pcsingle[varname] "% single"

. char collgrad[varname] "college?"

. groups collgrad race pcsingle , subvarname sepby(collgrad) 

  +-------------------------------------------------------+
  |         college?    race   % single   Freq.   Percent |
  |-------------------------------------------------------|
  | not college grad   white       29.2    1217     54.19 |
  | not college grad   black       53.3     480     21.37 |
  | not college grad   other       29.4      17      0.76 |
  |-------------------------------------------------------|
  |     college grad   white       31.4     420     18.70 |
  |     college grad   black       51.5     103      4.59 |
  |     college grad   other       33.3       9      0.40 |
  +-------------------------------------------------------+

提示#3通过使字符串等效来将显示格式转换为变量。我没有完全说明这一点,但是当我想将计数显示与数值结果相结合时,我经常使用它在tabdisp中有小数位。 format(%2.1f)format(%3.2f)可能对大多数变量都有效(顺便提一下,重要的细节是小数位数),但它们会导致42的计数显示为42.0或42.00,这看起来很像很傻。 format()的{​​{1}}选项无法访问字符串并更改内容;它甚至不知道字符串变量包含什么或它来自何处。因此,字符串只会在tabdisp出现时显示,这就是您想要的。

tabdisp

. gen s_pcsingle = string(pcsingle, "%2.1f") . char s_pcsingle[varname] "% single" 可以选择保存列为新数据集的内容。

提示#4要获得总类别,请暂时将数据翻倍。将原始克隆重新标记为“总计”类别。你可能需要做一些额外的计算,但没有任何东西等于火箭科学:一个聪明的高中生可以弄清楚。这里一个逐行研究的具体例子胜过冗长的解释。

groups

请注意使用未明确显示的变量添加分隔线的额外技巧。