STATA命令table与百分比列联表


title: "table"
author: "wintryheart"
date: "2022/5/6"
output: html_document



knitr::opts_chunk$set(engine="stata", engine.path="C:\\Program Files\\Stata17\\StataMP-64.exe", error=TRUE, cleanlog=TRUE, comment=NA)
library(Statamarkdown)

注:

  1. 当初我的电脑上的STATA版本是15,所以Statamarkdown包在安装时搜索到的是STATA15。
  2. 后来我又安装了STATA17,但是这个包似乎没有提供函数来修改stata engine。
  3. 所以我只好在knitr里修改engine.path,但是似乎只在chuck里运行有用,整个markdown文件运行knitr时,会出错。暂时没找到解决办法。

解决办法终于找到。参见3 Stata Engine Path | Using Statamarkdown (wisc.edu)

library(Statamarkdown)
stataexe <- "C:/Program Files/Stata17/StataMP-64.exe"
knitr::opts_chunk$set(engine.path=list(stata=stataexe))
knitr::opts_chunk$set(echo = TRUE, error=TRUE, cleanlog=TRUE, comment=NA)

前言

1. 与Table有关的常用命令

  • tabulate,最方便的做表命令,但只能用于一维和二维表。多维需要借助by,相当于拆成一系列二维表。

  • summarize, 做连续型变量分布的统计概要(summary statistics)最好用的命令。但只能做一维列表。

  • tabstat,与summarize相比,可以做分类别的连续型变量分布统计,但不能统计分类变量的分布。

  • fsum,与tabstat相比,可以统计分类变量的百分比分布。

2. 个人需求

有时,我需要做多维的百分比列联表。以前是使用by+tabulate。输出的结果是一系列二维表,不太好放进PPT,只能手工整理成一个表格。

其他Table命令,多擅长处理连续型变量,并不适合做分类变量或定序变量的百分比列联表。

直到,我发现table命令,终于解决将多维列联表输出在一个表中的问题。

table命令简介

[R] table -- Table of frequencies, summaries, and command results

table是非常灵活的命令,主要做变量描述性统计和列联表。

老版的table命令介绍,参见《Stata:今天你 “table” 了吗?》

这里介绍的是STATA17的新版table命令。

语法

table (rowspec) (colspec) [(tabspec)] [if] [in] [weight] [, options]

rowspeccolspectabspec 可以为空,可以是变量名,也可以是关键词。

常用关键词:

关键词 描述
result requested statistics
var variables from statistic() option
across index across() specifications
colname column names for matrix statistics
rowname row names for matrix statistics
command index option command()
statcmd index options statistic() and command()

基本概念

1. 布局

一个表的布局是由行、列和表的维度构成。rowspeccolspectabspec统称为表的“布局”(layout)

  • rowspec,行规范,指定行信息,
  • colspec,列规范,指定列信息,
  • tabspec,表的维度规范,指定表的维度的信息。

例如,我们指定变量名来定义行,并将统计信息放在列中,反之亦然。

2.关键词

table可以包含这么多不同的统计信息,我们可以指定 关键词keywords)来唯一标识从命令中收集到的结果和表计算出的统计信息。

如果我们在layout中忽略了一个必要的关键字,table将自动填充一个。

3. 关键词使用规则

决定关键词对于唯一标识表中的值是否必需的规则如下:

  1. 如果指定了多个统计信息,则在布局中使用result
  2. 如果在选项statistic()中指定了多个变量,而没有指定选项command(),则在布局中使用var
  3. 如果比率统计使用了多个across(),那么在布局中使用across
  4. 如果指定了选项 command(),则布局中需要使用colname。另外,如果还在选项statistic()中指定了多个变量,则需要colname而不是2中要求的var
  5. 如果指定了多个command()选项,而未指定选项statistic(),则需要在布局中使用command
  6. 如果同时指定了选项command()和statistic(),那么布局中使用statcmd

如果我们没有在rowspeccolspectabspec中直接指定一个必要的关键字,则缺少的关键字将被自动添加到布局中,如下所示:

  1. 如果行规范为空,则将缺少的关键字放入rowspec中。
  2. 如果行规范不为空,但列规范为空,则将缺失的关键字放入colspec中。
  3. 如果行和列的规范不为空,但表的高维规范为空,并且result是唯一缺少的关键字,并且只有一个统计信息(result),那么将result放入tabspec
  4. 否则,将缺少的关键字附加到rowvars

下面演示关键字在布局中的使用规则:

sysuse auto
describe
//指定统计信息放在行
table (result) rep78, statistic(mean mpg) statistic(sd mpg)
//省略关键词,命令与上面等价
table () rep78, statistic(mean mpg) statistic(sd mpg)
//行不空,而列空,则统计信息放在列。
table rep78, statistic(mean mpg) statistic(sd mpg)

running: C:\Program Files\Stata17\StataMP-64.exe  /q /e do "C:\Users\wintryheart\Desktop\stata238026c06106.do" 
stata output from unnamed-chunk-1
Contains data from C:\PROGRA~1\Stata17\ado\base/a/auto.dta
 Observations:            74                  1978 automobile data
    Variables:            12                  13 Apr 2020 17:45
                                              (_dta has notes)
-------------------------------------------------------------------------------
Variable      Storage   Display    Value
    name         type    format    label      Variable label
-------------------------------------------------------------------------------
make            str18   %-18s                 Make and model
price           int     %8.0gc                Price
mpg             int     %8.0g                 Mileage (mpg)
rep78           int     %8.0g                 Repair record 1978
headroom        float   %6.1f                 Headroom (in.)
trunk           int     %8.0g                 Trunk space (cu. ft.)
weight          int     %8.0gc                Weight (lbs.)
length          int     %8.0g                 Length (in.)
turn            int     %8.0g                 Turn circle (ft.)
displacement    int     %8.0g                 Displacement (cu. in.)
gear_ratio      float   %6.2f                 Gear ratio
foreign         byte    %8.0g      origin     Car origin
-------------------------------------------------------------------------------
Sorted by: foreign


-------------------------------------------------------------------------------------
                   |                         Repair record 1978                      
                   |         1          2          3          4          5      Total
-------------------+-----------------------------------------------------------------
Mean               |        21     19.125   19.43333   21.66667   27.36364   21.28986
Standard deviation |  4.242641   3.758324   4.141325    4.93487   8.732385   5.866408
-------------------------------------------------------------------------------------


-------------------------------------------------------------------------------------
                   |                         Repair record 1978                      
                   |         1          2          3          4          5      Total
-------------------+-----------------------------------------------------------------
Mean               |        21     19.125   19.43333   21.66667   27.36364   21.28986
Standard deviation |  4.242641   3.758324   4.141325    4.93487   8.732385   5.866408
-------------------------------------------------------------------------------------


---------------------------------------------------
                   |      Mean   Standard deviation
-------------------+-------------------------------
Repair record 1978 |                               
  1                |        21             4.242641
  2                |    19.125             3.758324
  3                |  19.43333             4.141325
  4                |  21.66667              4.93487
  5                |  27.36364             8.732385
  Total            |  21.28986             5.866408
---------------------------------------------------

主要选项

totals (totals)和nototals控制哪些总计将在表中显示。默认情况下,报告所有的总计。

statistic (statspec)指定要显示的统计信息。包括三类:

  1. 频率统计信息:stat(freqstat)
  2. 汇总统计信息:stat(sumstat varlist)
  3. 比率统计信息:stat(ratiostat [varlist] [, ratio_options]),

command(cmdspec)指定从其中收集结果的Stata命令。可
重复使用,从多个STATA命令收集结果。
commnad可以报告存储在r()e()中的STATA命令运行结果。(通过相关命令的help文件查看存储了哪些结果)

快速使用

sysuse auto, clear

//生成一个新的分类变量
gen mpg2=1
replace mpg2=2 if mpg>20

// 一维表
table mpg2
table mpg2, stat(freq) stat(percent)

//二维表
//交叉联合概率
table rep78 foreign, stat(percent) nformat(%5.2f)
//行边缘和为100%,在每个因子变量水平上的百分比。
table rep78, stat(fvpercent foreign)
table rep78, stat(fvpercent foreign mpg2) 

//三维表的两种方式
table (rep78) (foreign mpg2)
table (rep78) (foreign) (mpg2)
//因子交互
table rep78, stat(fvpercent foreign#mpg2) nototal


//带相关分析的表。命令pwcorr的相关矩阵存储在r(C)里。
table (rowname) (colname), command(r(C): pwcorr mpg weight displacement)

//带回归系数的表
table colname, command(regress mpg weight foreign)


running: C:\Program Files\Stata17\StataMP-64.exe  /q /e do "C:\Users\wintryheart\Desktop\stata23807a6d140e.do" 
stata output from auto2
(36 real changes made)


--------------------
        |  Frequency
--------+-----------
mpg2    |           
  1     |         38
  2     |         36
  Total |         74
--------------------


------------------------------
        |  Frequency   Percent
--------+---------------------
mpg2    |                     
  1     |         38     51.35
  2     |         36     48.65
  Total |         74    100.00
------------------------------


-------------------------------------------------
                   |           Car origin        
                   |  Domestic   Foreign    Total
-------------------+-----------------------------
Repair record 1978 |                             
  1                |      2.90               2.90
  2                |     11.59              11.59
  3                |     39.13      4.35    43.48
  4                |     13.04     13.04    26.09
  5                |      2.90     13.04    15.94
  Total            |     69.57     30.43   100.00
-------------------------------------------------


----------------------------------------
                   |      Car origin    
                   |  Domestic   Foreign
-------------------+--------------------
Repair record 1978 |                    
  1                |    100.00      0.00
  2                |    100.00      0.00
  3                |     90.00     10.00
  4                |     50.00     50.00
  5                |     18.18     81.82
  Total            |     69.57     30.43
----------------------------------------


--------------------------------------------------------
                   |      Car origin            mpg2    
                   |  Domestic   Foreign       1       2
-------------------+------------------------------------
Repair record 1978 |                                    
  1                |    100.00      0.00   50.00   50.00
  2                |    100.00      0.00   62.50   37.50
  3                |     90.00     10.00   66.67   33.33
  4                |     50.00     50.00   33.33   66.67
  5                |     18.18     81.82   36.36   63.64
  Total            |     69.57     30.43   52.17   47.83
--------------------------------------------------------


------------------------------------------------------------------------
                   |                      Car origin                    
                   |      Domestic          Foreign           Total     
                   |        mpg2             mpg2              mpg2     
                   |   1    2   Total   1    2   Total    1    2   Total
-------------------+----------------------------------------------------
Repair record 1978 |                                                    
  1                |   1    1       2                     1    1       2
  2                |   5    3       8                     5    3       8
  3                |  20    7      27        3       3   20   10      30
  4                |   6    3       9        9       9    6   12      18
  5                |        2       2   4    5       9    4    7      11
  Total            |  32   16      48   4   17      21   36   33      69
------------------------------------------------------------------------


mpg2 = 1
------------------------------------------------
                   |          Car origin        
                   |  Domestic   Foreign   Total
-------------------+----------------------------
Repair record 1978 |                            
  1                |         1                 1
  2                |         5                 5
  3                |        20                20
  4                |         6                 6
  5                |                   4       4
  Total            |        32         4      36
------------------------------------------------

mpg2 = 2
------------------------------------------------
                   |          Car origin        
                   |  Domestic   Foreign   Total
-------------------+----------------------------
Repair record 1978 |                            
  1                |         1                 1
  2                |         3                 3
  3                |         7         3      10
  4                |         3         9      12
  5                |         2         5       7
  Total            |        16        17      33
------------------------------------------------

mpg2 = Total
------------------------------------------------
                   |          Car origin        
                   |  Domestic   Foreign   Total
-------------------+----------------------------
Repair record 1978 |                            
  1                |         2                 2
  2                |         8                 8
  3                |        27         3      30
  4                |         9         9      18
  5                |         2         9      11
  Total            |        48        21      69
------------------------------------------------


-------------------------------------------------------------
                   |                 Car origin              
                   |  Domestic   Domestic   Foreign   Foreign
                   |                    mpg2                 
                   |         1          2         1         2
-------------------+-----------------------------------------
Repair record 1978 |                                         
  1                |     50.00      50.00      0.00      0.00
  2                |     62.50      37.50      0.00      0.00
  3                |     66.67      23.33      0.00     10.00
  4                |     33.33      16.67      0.00     50.00
  5                |      0.00      18.18     36.36     45.45
-------------------------------------------------------------


--------------------------------------------------------------------------------
                       |  Mileage (mpg)   Weight (lbs.)   Displacement (cu. in.)
-----------------------+--------------------------------------------------------
Mileage (mpg)          |              1       -.8071749                -.7056426
Weight (lbs.)          |      -.8071749               1                 .8948958
Displacement (cu. in.) |      -.7056426        .8948958                        1
--------------------------------------------------------------------------------


----------------------------
              |  Coefficient
--------------+-------------
Weight (lbs.) |    -.0065879
Car origin    |    -1.650029
Intercept     |      41.6797
----------------------------

列联表实战

sysuse auto, clear

//连续型变量描述
//foreign为分类变量(因子类型),其他变量为连续型变量 
table, stat(mean price-gear_ratio) stat(fvpercent foreign)

//连续变量分foreign类别描述
table (result) (foreign), stat(mean price-gear_ratio) stat(sd price-gear_ratio)
// 对于连续变量的概要统计比不上summary和tabstat好用。


//百分比列联表

//生成两个新的分类变量
egen mpg2=cut(mpg), group(2)  //2等分
egen weight4=cut(weight), group(4)  //4等分

//以mpg2为因变量,以weight4为自变量,以foreign为控制变量
//我们要观察一个变量随着另一个变量的变化而发生的变化。
//即,我们需要计算条件概率或相对概率。

//percent,计算的是交叉联合概率。
//第一种方式:借助across()选项,计算条件概率。
//注意,在自变量的每一类别内,所有因变量的类别的百分比分布合计必须等于100%。
table(mpg2) (weight4), stat(percent, across(mpg2))
//随着车重的增加,低油耗的车比例下降,高油耗的车比例上升。
//增加foreign为控制变量
table (foreign weight4) (mpg2) (result), statistic(percent, across(mpg2)) stat(freq) totals(foreign#weight4)

//第二种方式:使用fvpercent,计算条件概率。
//fvpercent,计算的是在因子类别下的百分比分布。
//我们可使用fvpercent计算条件概率,然后进行比较。
table weight4, stat(fvpercent mpg2) nototal
//或者,把因变量的分类放在行。
table ()(weight4), stat(fvpercent mpg2) nototal
//添加控制变量
table() (foreign weight4), stat(fvpercent mpg2) nototal 

running: C:\Program Files\Stata17\StataMP-64.exe  /q /e do "C:\Users\wintryheart\Desktop\stata23807bdf2781.do" 
stata output from auto3
Mean                     |          
  Price                  |  6165.257
  Mileage (mpg)          |   21.2973
  Repair record 1978     |  3.405797
  Headroom (in.)         |  2.993243
  Trunk space (cu. ft.)  |  13.75676
  Weight (lbs.)          |  3019.459
  Length (in.)           |  187.9324
  Turn circle (ft.)      |  39.64865
  Displacement (cu. in.) |  197.2973
  Gear ratio             |  3.014865
Factor variable percent  |          
  Car origin=Domestic    |     70.27
  Car origin=Foreign     |     29.73
------------------------------------


----------------------------------------------------------
                         |            Car origin          
                         |  Domestic    Foreign      Total
-------------------------+--------------------------------
Mean                     |                                
  Price                  |  6072.423   6384.682   6165.257
  Mileage (mpg)          |  19.82692   24.77273    21.2973
  Repair record 1978     |  3.020833   4.285714   3.405797
  Headroom (in.)         |  3.153846   2.613636   2.993243
  Trunk space (cu. ft.)  |     14.75   11.40909   13.75676
  Weight (lbs.)          |  3317.115   2315.909   3019.459
  Length (in.)           |  196.1346   168.5455   187.9324
  Turn circle (ft.)      |  41.44231   35.40909   39.64865
  Displacement (cu. in.) |  233.7115   111.2273   197.2973
  Gear ratio             |  2.806538   3.507273   3.014865
Standard deviation       |                                
  Price                  |  3097.104   2621.915   2949.496
  Mileage (mpg)          |  4.743297   6.611187   5.785503
  Repair record 1978     |   .837666   .7171372   .9899323
  Headroom (in.)         |  .9157578   .4862837   .8459948
  Trunk space (cu. ft.)  |  4.306288   3.216906   4.277404
  Weight (lbs.)          |  695.3637   433.0035   777.1936
  Length (in.)           |  20.04605   13.68255   22.26634
  Turn circle (ft.)      |  3.967582   1.501082   4.399354
  Displacement (cu. in.) |  85.26299   24.88054   91.83722
  Gear ratio             |  .3359556   .2969076   .4562871
----------------------------------------------------------




-----------------------------------------------------
        |                    weight4                 
        |       0        1        2        3    Total
--------+--------------------------------------------
mpg2    |                                            
  0     |            21.05    76.47    90.00    47.30
  1     |  100.00    78.95    23.53    10.00    52.70
  Total |  100.00   100.00   100.00   100.00   100.00
-----------------------------------------------------


Percent
---------------------------------------
            |            mpg2          
            |       0        1    Total
------------+--------------------------
Car origin  |                          
  Domestic  |                          
    weight4 |                          
      0     |           100.00   100.00
      1     |           100.00   100.00
      2     |   75.00    25.00   100.00
      3     |   90.00    10.00   100.00
  Foreign   |                          
    weight4 |                          
      0     |           100.00   100.00
      1     |   44.44    55.56   100.00
      2     |  100.00            100.00
---------------------------------------

Frequency
------------------------------
            |        mpg2     
            |   0    1   Total
------------+-----------------
Car origin  |                 
  Domestic  |                 
    weight4 |                 
      0     |        6       6
      1     |       10      10
      2     |  12    4      16
      3     |  18    2      20
  Foreign   |                 
    weight4 |                 
      0     |       12      12
      1     |   4    5       9
      2     |   1            1
------------------------------


-------------------------
        |       mpg2     
        |      0        1
--------+----------------
weight4 |                
  0     |   0.00   100.00
  1     |  21.05    78.95
  2     |  76.47    23.53
  3     |  90.00    10.00
-------------------------


----------------------------------------
       |              weight4           
       |       0       1       2       3
-------+--------------------------------
mpg2=0 |    0.00   21.05   76.47   90.00
mpg2=1 |  100.00   78.95   23.53   10.00
----------------------------------------


-------------------------------------------------------------------
       |                          Car origin                       
       |              Domestic                      Foreign        
       |              weight4                       weight4        
       |       0        1       2       3        0       1        2
-------+-----------------------------------------------------------
mpg2=0 |    0.00     0.00   75.00   90.00     0.00   44.44   100.00
mpg2=1 |  100.00   100.00   25.00   10.00   100.00   55.56     0.00
-------------------------------------------------------------------
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,701评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,649评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,037评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,994评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,018评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,796评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,481评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,370评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,868评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,014评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,153评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,832评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,494评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,039评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,437评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,131评论 2 356