SAS入門5/3

Last-modified: 2011-05-20 (金) 23:27:56
サマリ異常値の検出
投稿者ふなまさ?
状態
投稿日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
     */