在计划内实施时,为什么制表或汇总不考虑缺失值?

时间:2016-05-26 17:06:50

标签: syntax stata missing-data

作为一个说明性示例,假设这是您的数据集:

cat sex age
1   1   13
1   0   14
1   1   .
2   1   23
2   1   45
2   1   15

如果您要在catsex之间创建频率表,则tabulate这两个变量会得到以下结果:

tab cat sex
       |         sex
   cat |         0          1 |     Total
-----------+----------------------+----------
     1 |         1          2 |         3 
     2 |         0          3 |         3 
-----------+----------------------+----------
 Total |         1          5 |         6 

我正在编写一个涉及三个变量的Stata程序,即catsexage。获得前两个变量的频率矩阵只是我进一步计算所需的中间步骤。

cap program drop myexample
program def myexample, rclass byable(recall) sortpreserve
version 14
syntax varlist [aweight iweight fweight] [if] [in] [ , AGgregate  ]
args var1 var2 var3
tempname F

marksample touse 
set more off

if "`aggregate'" == "" {
    local var1:  word 1 of `varlist'
    local var2: word 2 of `varlist'
    local var3:  word 3 of `varlist'

    qui: tab `var1' `var2' [`weight' `exp'] if `touse', matcell(`F')  label matcol(`var2')

    mat list `F'
}
   end

然而,当我跑步时:

myexample cat sex age

我得到的结果不符合我的预期:

__000001[2,2]
     c1  c2
r1   1   1
r2   0   3

也就是说,假设age包含缺失值,即使它没有直接参与制表,程序也会忽略缺失值而不考虑该观察值。我需要得到第一个表格的结果。我尝试使用summarize代替,但同样的问题出现了。在程序内部实现时,不计算缺失值。

3 个答案:

答案 0 :(得分:3)

您正在抱怨您在自己的程序中构建的行为。责任和解释掌握在你手中。

的影响
marksample touse 

然后使用限定符

调用命令
if `touse' 

是忽略缺失值。 marksample默认标记为"使用"指定所有变量具有非缺失值的观察结果;其他观察结果被标记为被忽略。它还考虑了任何ifin限定符和任何零权重。

正如@Noobie所解释的那样,在任何情况下,tabulate默认情况下,从列表中省略缺失值是正确的。

因此,要获得您希望的结果,您需要修改marksample来电

marksample touse, novarlist 

并使用tabulate选项调用missing(如果必须这样)或允许用户指定missing选项,然后将其传递给{{1 }}。

您还询问tabulate。通过设计,该命令忽略了缺失值。我不知道你期望summarize对他们做些什么。它可以报告缺失值的计数。如果您需要,还需要其他几个命令,例如summarizecodebook Stata Journal )。您始终可以在计划中添加有关投失的报告,例如使用missings计算错失并count结果。

我了解您的计划正在进行中,因此不会评论您不会提出的详细信息。

答案 1 :(得分:2)

这是由marksample引起的。 help mark个州的规则5

  

标记变量在观察中设置为0,其中任何一个都是   varlist中的数字变量包含数字缺失值。

您应该使用novarlist选项。根据帮助文件,

  

novarlist用于标记样本。它指定缺少值      varlist中的变量之间不会导致标记变量设置为0。

答案 2 :(得分:0)

如果我理解你想要标签包含缺失值?如果是这样,你只需要求它

tab myvar1 myvar2, mi

来自文档

  

缺少:像其他值一样处理缺失值