我希望有一个3向表,使用三个分类变量显示列或行百分比。下面的命令给出了计数,但我找不到如何获得百分比。
XML::Twig
我如何获得百分比?
答案 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
请注意使用未明确显示的变量添加分隔线的额外技巧。