• 软件SAS
  • tabulate和freq对统一数据的四格表产出不一样?

我在用freq和tabulate分别做四格表,写的程序如下,我认为,以下三组程序所产生的结果应该是一样的:

第一组:

proc freq data=a;

tables v012*sex/nocol norow nopercent;

tables v013*sex/nocol norow nopercent;

run;

第二组:

proc tabulate data=a;

class v012 sex;

tables (v012='' all='合计'), (all='合计' sex='')* n='';

run;

proc tabulate data=a;

class v012 v013 sex;

tables (v013='' all='合计'), (all='合计' sex='')* n='';

run;

第三组:

proc tabulate data=a;

class v012 v013 sex;

tables (v012='' all='合计'), (all='合计' sex='')* n='';

tables (v013='' all='合计'), (all='合计' sex='')* n='';

run;

但是事实上,这三组得出的四格表中的数据都不一样,看合计项就能看出。更为可笑的就是第二和第三组,我只是把两个tables语句合在一个tabulate过程中,但居然和分开为两个tabulate过程的结果不一样。

现附上数据。

请高手运算以下,看是不是我的sas出了问题,还是我自己的知识出了问题。难道这三组程序不等价么?非常疑惑,求解!

回复 第1楼 的 lisijie515:

因为数据中v012和v013有不同的缺失情况,proc tabulate在处理时会剔除缺失值,参加帮助中“If you omit MISSING, then PROC TABULATE excludes the observations with any missing CLASS variable values from tables and output data sets.”

而proc freq得到的表下面会说明缺失值的情况。

在proc tabulate的class后添加missing选项就清楚了,三种方法得到的结果也是一致的。

如:

<br />
proc tabulate data=a;<br />
class v012 sex / missing;<br />
tables (v012='' all='合计'), (all='合计' sex='')* n='';<br />
run;<br />
</p>

回复 第3楼 的 hssnow:好的,我会试试。但是请教一下,为什么第二组和第三组的结果会不同呢?这二者的区别仅仅是两个tables语句放在一个tabulate过程中,或者分别放在两个tabulate过程中。我认为这不会导致输出结果的差异呀?