我将两个变量variable1与5个级别交叉制表,将variable2与2个级别交叉制表。制表的结果是变量1的1级和2级没有显示在制表中,因为频率为零,如下所示:
sysuse auto
levelsof rep78
1 2 3 4 5
tab rep78 foreign if foreign, col nofreq
Repair |
Record | Car type
1978 | Foreign | Total
-----------+-----------+----------
3 | 14.29 | 14.29
4 | 42.86 | 42.86
5 | 42.86 | 42.86
-----------+-----------+----------
Total | 100.00 | 100.00
我想将所有级别的列表显示如下:
tab rep78 foreign if foreign, col nofreq
Repair |
Record | Car type
1978 | Foreign | Total
-----------+-----------+----------
1 | 0.00 | 0.00
2 | 0.00 | 0.00
3 | 14.29 | 14.29
4 | 42.86 | 42.86
5 | 42.86 | 42.86
-----------+-----------+----------
Total | 100.00 | 100.00
我该怎么做?
我需要这个的原因是我创建了一个程序,该程序将给定变量制表,并使用Stata的putexcel
功能将结果发布到Excel报表模板中。在某些情况下,某些级别不会显示在列表中,这会导致某些值被发布到Excel报告的错误行。
答案 0 :(得分:2)
OP还没有像样的例子,但这里有一些技巧。
总的来说,这很棘手。 Stata不是形而上学家,并且不愿意在没有经验证据的情况下展示它存在的东西。我在这里创建一个包含所有所需交叉组合的数据集,并创建一个带有显式零的变量来显示。对于许多问题,请参阅help fillin
。
. clear
. sysuse auto
(1978 Automobile Data)
. contract foreign rep78, zero
. egen pc = pc(_freq), by(foreign)
. tabdisp rep78 foreign if !foreign, c(pc) format(%2.1f)
--------------------
Repair |
Record | Car type
1978 | Domestic
----------+---------
1 | 3.8
2 | 15.4
3 | 51.9
4 | 17.3
5 | 3.8
. | 7.7
--------------------
. tabdisp rep78 foreign if foreign, c(pc) format(%2.1f)
-------------------
Repair |
Record |Car type
1978 | Foreign
----------+--------
1 | 0.0
2 | 0.0
3 | 13.6
4 | 40.9
5 | 40.9
. | 4.5
-------------------
创建表格的命令回显你提供的内容(特别是tabdisp
)比创建摘要的命令更有用,然后创建显示摘要的表格(例如tabulate
,table
)。