我想创建一个包含三个变量的表,其中var2是var1的百分比,var3是var2的百分比,由具有缺失值的类变量细分 .
为了解释,想象一下,我有数据显示谁申请,接受采访,并被聘用工作,例如
data job;
input applied interviewed hired;
datalines;
1 1 1
1 1 1
1 1 1
1 1 0
1 1 0
1 1 0
1 0 .
1 0 .
1 0 .
1 0 .
;
run;
创建一个表格可以很容易地显示应用者的数量,然后是受访者的百分比,然后是那些人的百分比,被雇用的百分比 .
proc tabulate data = job;
var applied interviewed hired;
tables applied * n (interviewed hired) * mean * f=percent6.;
run;
这使:
applied interviewed hired
10 60% 50%
现在我想通过缺少值的几个类变量来解决这个问题 .
data have;
input sex degree exp applied interviewed hired;
datalines;
0 1 1 1 1 1
1 . 0 1 1 1
. 0 1 1 1 1
0 1 0 1 1 0
1 0 1 1 1 0
0 1 0 1 1 0
1 . 1 1 0 .
0 1 . 1 0 .
. 0 0 1 0 .
1 0 0 1 0 .
;
run;
如果我一次做一个类变量,它会给我正确的百分比:
proc tabulate data = have format = 6.;
class sex;
var applied interviewed hired;
tables sex, applied * sum (interviewed hired) * mean * f=percent6.;
run;
有没有办法一次在表中执行所有三个类变量,并为每个类别获得正确的百分比 . 所以表格如下:
applied interviewed hired
sex
0 4 75% 33%
1 4 50% 50%
degree
0 4 50% 50%
1 4 75% 33%
exp
0 5 60% 33%
1 4 75% 67%
这是我必须做很多次的事情,我需要在报表中用数字填充表格,所以我正在寻找一个可以一步打印表格的解决方案 .
你怎么解决这个问题?
2 回答
您遇到的问题是缺少数据 . 当任何类变量都缺少一个case时,它将从整个表中删除,除非你在proc调用中指定MISSING . 所以,例如,你没有采访的第四性别= 0缺少EXP;所以他们没有在 table 上露面,尽管你希望他们出现在SEX中 .
您可以获得正确的数字,主要是:
但是,您有一个额外的行,其中包含缺少数据的行 . 您无法从打印输出中消除这些行,同时还将其包含在其他类计算中;这只是SAS制表的限制之一 . 其他PROC也有类似的问题;如果生成多个表,PROC FREQ是唯一不执行此操作的人,但即使在一个表中(与星号结合),您也会遇到相同的问题 .
我找到的唯一方法是将表输出到数据集,然后过滤掉这些行,然后PROC REPORT或PRINT或TABULATE数据 .
我认为这很接近你想要的 . 您必须修复行标签,但它是一个PROC TABULATE步骤 .