|
本帖最后由 henryyhl 于 2013-8-17 18:02 编辑
在用sas做表格的时候,有时候要统计一下某个应变量和其他很多自变量之间的R*2表格,正好在分析数据时遇到这个问题,整理一下,希望对大家有用。
/*用随机函数ranuni产生随机数,并取整后算出被2、3、5除后的余数作为y 、b、c的值,假设y为因变量,b c为自变量*/
data one;
do i=1 to 80;
y=mod(int(ranuni(222)*100),2);
b=mod(int(ranuni(333)*100),3);
c=mod(int(ranuni(444)*100),5);
output;
end;
run;
proc print ;
run;
/*用freq过程做表,不显示行百分比和总的百分比,能够做卡方检验,但是只是分别显示每个变量和因变量直接的列联表*/
proc freq data=one ;
tables (b c)*y/ nopercent norow ;
run;
/*用tabulate过程可以将多个自变量显示在一个列联表中,但是好像无法做卡方检验 ,
noseps是不显示竖直的分割线,formchar=" __________"是表示用横线,具体解释参考相关书籍*/
proc tabulate data=one noseps formchar=" __________";
class y b c;
tables (b c),(y all)* (n*f=5. pctn);
/*pctn是显示总的百分比,下面的colpctn是显示列百分比,all表示计算合计列*/
run;
proc tabulate data=one noseps formchar=" __________";
class y b c;
tables (b c),(y all)* (n*f=5. colpctn);
run;
表 — c X y
c y
频数 |
列百分比| 0| 1| 合计
--------+--------+--------+
0 | 6 | 7 | 13
| 16.67 | 15.91 |
--------+--------+--------+
1 | 7 | 8 | 15
| 19.44 | 18.18 |
--------+--------+--------+
2 | 7 | 6 | 13
| 19.44 | 13.64 |
--------+--------+--------+
3 | 9 | 14 | 23
| 25.00 | 31.82 |
--------+--------+--------+
4 | 7 | 9 | 16
| 19.44 | 20.45 |
--------+--------+--------+
合计 36 44 80
2013年08月17日 星期六 下午02时09分01秒
________________________________________________________________________________
y
_______________________________________
0 1 All
__________________________________________________________
N ColPctN N ColPctN N ColPctN
________________________________________________________________________________
b
0 17 47.22 18 40.91 35 43.75
1 8 22.22 15 34.09 23 28.75
2 11 30.56 11 25.00 22 27.50
c
0 6 16.67 7 15.91 13 16.25
1 7 19.44 8 18.18 15 18.75
2 7 19.44 6 13.64 13 16.25
3 9 25.00 14 31.82 23 28.75
4 7 19.44 9 20.45 16 20.00
________________________________________________________________________________
当然还可以用ods 把结果保存到rtf文件中。以上只是以2个变量为例子,要是自变量很多时做起来就快多了,当然还有进一步的修饰才能做出符合期刊要求的表格。
以上是个人原创,难免有不足之处,希望大家指正。 |
|