サマリ | 異常値の検出 |
---|---|
投稿者 | ふなまさ? |
状態 | |
投稿日 | 2011-05-12 (木) 09:50:11 |
質問
pidにそれぞれ以下の様に検査値(A,B,C)のdata exam_data;があったとします。
pid A B C
001 10 55 60
002 30 45 70
003 20 30 180
004 40 80 90
005 70 60 110
ここでA>50,B>40,C>100のリストを以下の様に作成したいです。
ID ex val
001 B 55
002 B 45
003 C 180
004 B 80
005 A 70
005 C 110
よろしくお願いします。
検査項目が増えても(A,B,C→A,B,C,D,E..)、ある程度の効率化を考えてプログラミングのノウハウを教えていただければ幸いです。
回答
- 回答が遅れてすみません(今気が付きました) -- 翔 2011-05-20 (金) 18:17:05
options nocenter; /*データを読み込む*/ data ex; input pid $ A B C; cards; 001 10 55 60 002 30 45 70 003 20 30 180 004 40 80 90 005 70 60 110 ; /*データを縦にする*/ proc transpose data=ex output=t; by pid; var A B C; run; /*条件で絞る*/ data over50;set t(rename=(_name_=ex col1=val)); if (ex="A" and val>50) or (ex="B" and val>40) or (ex="C" and val>100) then output; run; proc print;run; /* OBS pid ex val 1 001 B 55 2 002 B 45 3 003 C 180 4 004 B 80 5 005 A 70 6 005 B 60 7 005 C 110 */