1. 程式人生 > >分類資料之列聯表分析案例with sas

分類資料之列聯表分析案例with sas

*表一,隨機設計四格表;
options validvarname=any;
data test1;
   input 用藥 $ 敏感性 $ 計數;
   datalines;
服藥 不敏感 180
服藥 敏感  215
未服藥 不敏感 73
未服藥 敏感  106
;
proc freq data=test1 order=data;
   weight 計數;
   tables 用藥*敏感性 / chisq nocol;
run;
*兩個格子的理論頻數比1大比5小的情況,使用連續性校正卡方檢驗較優;
data test2;
   input 年級 $ 近視情況 $ 計數;
   datalines;
四年級 非近視 26
四年級 近視   2
五年級 近視 5
五年級 非近視 9
;
proc freq data=test2 order=data;
   weight 計數;
   tables 年級*近視情況 / chisq nocol;
run;


* 頻數<40的情況,四格表的Fisher確切檢驗法較優;
data test3;
   input 療法 $ 療效 $ 計數;
   datalines;
新療法 未治癒 2
新療法 治癒 7
保守療法 治癒 2
保守療法 未治癒 6
;
proc freq data=test3 order=data;
   weight 計數;
   tables 療法*療效 / chisq nocol;
run;


*配對設計四格表,應用配對四格表 (也叫McNemar)檢驗;
data test4;
   input 培養基A $ 培養基B $ 計數;
   datalines;
陽性 陽性 48
陽性 陰性 24
陰性 陽性 20
陰性 陰性 106
;
proc freq data=test4 order=data;
   weight 計數;
   tables 培養基A*培養基B / chisq nocol;
   exact agree;
run;


* 完全隨機設計R×C表格;
data test5;
   input 地區 $ 血型 $ 計數;
   datalines;
亞洲 A 321
亞洲 B 369
亞洲 AB 95
亞洲 O 295
歐洲 A 258
歐洲 B 43
歐洲 AB 22
歐洲 O 194
北美洲 A 408
北美洲 B 106
北美洲 AB 37
北美洲 O 444
;
proc freq data=test5 order=data;
   weight 計數;
   tables 地區*血型 / chisq nocol;
run;
data test6;
   input 藥物 $ 藥效 $ 計數;
   datalines;
新葯 有效 6
傳統藥 有效 11
安慰劑 有效 29
新葯 無效 42
傳統藥 無效 26
安慰劑 無效 8
;
proc freq data=test6 order=data;
   weight 計數;
   tables 藥物*藥效 / chisq nocol;
run;


*雙向無序的列聯表,類似配對設計,例如ABO血型與MN血型;
data test7;
   input ABO血型 $ MN血型 $ 計數 @@;
   datalines;
O M	431 O N	490 O MN 902
A M	388	A N 410	A MN 800
B M	495 B N	587 B MN 950
AB M 137 AB N 179 AB MN 32
;
proc freq data=test7 order=data;
   weight 計數;
   tables ABO血型*MN血型 / chisq nocol;
run;
*單向有序分類變數列聯表,如藥物療效是等級變數,秩和檢驗;
data test8;
   input 藥物 $ 療效 $ 計數 @@;
   datalines;
A藥 無效 5 A藥 好轉	31 A藥 顯效	49 A藥 治癒 15
B藥	無效 22 B藥 好轉	50 B藥 顯效 9 B藥 治癒 4
C藥	無效 24 C藥 好轉	45 C藥 顯效	15 C藥 治癒 1
;
proc freq data=test8 order=data;
   weight 計數;
   tables 藥物*療效 / cmh scores=rank nocol;
run;
*雙向有序分類變數,不同年齡組用秩和檢驗,年齡與眼睛晶狀體混濁程度相關性用等級相關檢驗;
data test9;
  input 年齡 $ 表現 $ 計數 @@;
  datalines;
20~ + 215 20~ ++ 67 20~ +++ 44
30~	 + 131 30~ ++ 101 30~	 +++ 63
40~ + 148 40~ ++ 128 40~ +++ 132
;
proc freq data=test9 order=data;
   weight 計數;
   tables 年齡*表現 / cmh scores=rank;
   test scorr;
run;
*雙向有序並且屬性相同的,雙向均為按等級分類,一致性(Kappa)檢驗;
data test10;
   input 對比法 $ 核素法 $ 計數 @@;
   datalines;
正常	 正常 58 正常 減弱 2 正常 異常 3
減弱 正常 1 減弱 減弱 42 減弱 異常 7
異常 正常 8 異常 減弱 9	異常 異常 17
;
proc freq data=test10 order=data;
   weight 計數;
   tables 對比法*核素法 / agree norow nocol nopercent;
   test kappa wtkap;
run;