僕の頁 <SASと臨床試験と雑談と>

徒然なるままにSAS暮らし

0208

IMLプロシジャによる対比較の対比係数自動生成  

とある解析のマクロを作成する際に、対比較の対比係数の自動生成が
必要になったので、IMLプロシジャでの対処方法メモしておきます。

目的:
対照群を指定すると、その対照群とそれ以外の群の対比較に対応する
対比係数を自動生成する。投与群の総数と対照群の番号(下から何番目か)
から対比係数を生成する。

ロジックは、
①群数だけ要素を持ち、値は全て0のベクトルをJ関数で生成
②対照群に対応する要素だけ-1に変換
③群数×群数の単位行列と②の行列を足す(全ての行が対象)
④LOC関数で対照群に対応する要素が-1の行を特定する。
⑤④で特定した行だけ残す(欲しい対比係数だけを
 行ごとに格納している行列となっている)。

すこしややこしいですが、プログラムは単純なので各行列・ベクトルの
アウトプットとともに確認しましょう。ここでは、投与群が5群存在して、
3群目を対照群とする対比係数を4個生成しています。LOC関数はすごく
便利ですね。
%let _M_GC = 5 ; *--- 群数(対比係数の数) ;
%let _CONT = 3 ; *--- 対照群の値(場所) ;

*** 対比係数の生成 ;
proc iml ;
X = j(1,&_M_GC,0) ; *--- 群数だけ0の要素を持つベクトル ;
X[,&_CONT] = -1 ; *--- 対照群のみ-1を代入 ;
Y = I(&_M_GC) ; *--- 単位行列 ;
Z = X + Y ; *--- 対照群に対応する行のみ0の行列 ;
ROWS2KEEP = loc(Z[,&_CONT] = -1) ; *--- 残す行 ;
Z2 = Z[ROWS2KEEP,] ; *--- 0の行を除いた行列 ;
print X Y Z ROWS2KEEP Z2 ;
quit ;

結果を見てみましょう。欲しい行列はZ2です。Zの状態では、不要な行が
含まれていますが、LOC関数で必要な行を特定しています。
Generate_CC.png
この後マクロ変数に放り込んで統計のプロシジャに処理を投げるのですが、
マクロ変数への格納方法も色々あって面白そうなので考えてみます。
スポンサーサイト

Posted on 2014/02/08 Sat. 17:12 [edit]

CM: 0
TB: 0

プロフィール

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

訪れた人

▲Page top