「SQLプロシジャでフラグ変数を簡単に作成。」を発展させたやり方。
A薬投与例数、B薬投与例数、中止例数、、etc
色々な例数をカウントしたい場合、SQLなら1STEPで簡単に出来てしまう。
サンプルデータ
data DT1; attrib SUBJID label="症例番号" length=$3. ARM label="群" length=$10. SEX label="性別" length=$1. AEYN label="有害事象有無" length=$1. ; input SUBJID$ ARM$ SEX$ AEYN$ ; cards; 001 A薬 M Y 002 B薬 F Y 003 A薬 F N 004 A薬 M Y 005 B薬 F N ; run; |
SQLプロシジャで各例数を計算
proc sql; create table DT2 as select sum(ARM="A薬") as N_ARM1, sum(ARM="B薬") as N_ARM2 from DT1; quit; |
解説
関数の中に条件式を入れてるとこがポイント。
仕組みはまず、条件式に合致する場合「true=1」、
合致しない場合「false=0」が返される。
その「0」か「1」になった値をsum関数で合計することで、条件に合致する例数をカウントしたことになる。
ちなみによくやる間違えとして、sum関数じゃなくcount関数を使ってしまいがち。
count関数は非欠損値の数をカウントするので、「0」も「1」もカウントしちゃって意味のない処理になっちゃうので注意。
応用
グループ毎に色々な有無を出すこともできる。
たとえば、上記で作成したサンプルデータで以下のように「群毎の有無」を出したいとする。
ちなみに「0=無」「1=有」を表す。
SQLプロシジャで群毎の各有無を出す。
解説
条件式が「1=true」「0=false」となることを利用し、
「max(条件式)」とすることで「0=無」「1=有」という感じで、有無を得ることが出来てしまう。
SQLの素晴らしい柔軟さが伺える。
応用
グループ毎に色々な有無を出すこともできる。
たとえば、上記で作成したサンプルデータで以下のように「群毎の有無」を出したいとする。
ちなみに「0=無」「1=有」を表す。
SQLプロシジャで群毎の各有無を出す。
proc sql; create table DT3 as select ARM, max(AEYN="Y") as AEYN, max(SEX="M" and AEYN="Y") as MALEYN from DT1 group by ARM; quit; |
解説
条件式が「1=true」「0=false」となることを利用し、
「max(条件式)」とすることで「0=無」「1=有」という感じで、有無を得ることが出来てしまう。
SQLの素晴らしい柔軟さが伺える。
0 件のコメント:
コメントを投稿