/*------------------------------- 数量化2類の数値例.駒沢(1988) %su2 ( Version 1.1 ) の使用例 -------------------------------*/ proc format ; value sickf 1 = '1.脳出血' 2 = '2.脳梗塞' 3 = '3.心筋梗塞' 4 = '4.狭心症' ; value af 1 = '(1) 49 - 54' 2 = '(2) 55 - 59' ; value bf 1 = '(1) 正常' 2 = '(2) 異常' ; value cf 1 = '(1) 正常' 2 = '(2) 異常' ; value df 1 = '(1) 139 以下' 2 = '(2) 140 - 170' 3 = '(3) 171 以上' ; value ef 1 = '(1) 84 以下' 2 = '(2) 85 - 95' 3 = '(3) 96 以上' ; value ff 1 = '(1) 7.4 以下' 2 = '(2) 7.5 - 8.5' 3 = '(3) 8.6 以上' ; value gf 1 = '(1) 179 以下' 2 = '(2) 180 - 210' 3 = '(3) 211 以上' ; run ; DATA su2 ; label sick = '病名' x1 = '1.年 齢' x2 = '2.眼底所見' x3 = '3.心電図所見' x4 = '4.最大血圧' x5 = '5.最小血圧' x6 = '6.大動脈速度' x7 = '7.コレステ' ; INPUT ( x1 - x7 sick ) ( 1. ) ; format sick sickf. x1 af. x2 bf. x3 cf. x4 df. x5 ef. x6 ff. x7 gf. ; DATALINES; 11122211 22132121 21122221 22233321 12223221 21133331 21123331 11123221 22233221 11133331 11233211 11233221 21111231 12123121 11133322 11133222 22133322 11122232 12112112 12211212 11122312 22223232 11133222 21121322 11222122 21121322 11111322 22133332 11111322 11122233 11133113 21233123 11123323 21111123 11122223 11211223 11223323 11211333 12223213 11112233 12121223 22211134 11111234 21211224 11221224 11122124 21222224 11223124 21211324 12123124 22133224 11122124 ; run ; %su2( data = su2, outside = sick, item = x1 - x7, dim = 3 , out = su2out, workds = save ) /*------------------------------------------------------- 数量化2類で作成した判別モデルを新しいデータに適用する newdata = オプションを使用する. -------------------------------------------------------*/ data new ; /* ここには実際には新しいデータがくるのだが */ /* su2 から無作為抽出して新データを仮設する */ do i = 1 to 30 ; n = ceil( ranuni( 0 ) * total ); set su2 nobs = total point = n ; output ; end ; stop ; run ; title "新データに判別モデルを適用する事例" ; %su2( data = su2, newdata = new , outside = sick, item = x1 - x7, dim = 3 , out = su2out, workds = save ) /*------------------------------------------------------- 簡単な cross validation(相互検証法・交差確認法)の例 -------------------------------------------------------*/ data x ; set su2 ; random = ranuni( 5031 ) ; run ; proc sort data = x ; by random ; run ; data train test ; set x nobs = total ; if _n_ <= ( total / 2 ) then output train ; else output test ; run ; title "簡単なクロスバリデーション" ; %su2( data = train, newdata = test , outside = sick, item = x1 - x7, dim = 3 , workds = save ) title ;