본문 바로가기
SAS/SAS Tip's

[SAS] 그룹별 동일 항목으로 구성된 관측치 추출하기

by 기서무나구물 2022. 12. 28.

포스팅 목차

     

    [SAS] 그룹별 동일 항목으로 구성된 관측치 추출하기

     

    * 질문 항목 : https://cafe.daum.net/statsas/B3m/15505

     

    Daum 카페

     

    cafe.daum.net

     


    SAS Programming
    DATA BACK;
         INPUT id item $;
    CARDS;
    1 a
    1 b
    1 c
    1 d
    2 a
    2 a
    2 a
    2 a
    3 a
    3 b
    3 a
    3 b
    4 a
    4 c
    4 a
    4 c
    5 b
    5 b
    6 b
    6 b
    6 b
    6 b
    7 a
    7 a
    7 a
    7 a
    ;

    • 방법1 : ID를 기준으로 item 변수를 정렬하여서 ID별로 최종 값이 'a' 인 경우에 해당하는 관측치 선택하여 원본(back)에서 해당 관측치 선택;
    SAS Programming
    PROC SORT DATA=BACK;
         BY id item;
    RUN;
    
    DATA BACK_1;
     SET BACK;
         BY id item;
         IF LAST.ID AND ITEM='a' THEN OUTPUT;
    RUN;
    
    DATA BACK_2;
     MERGE BACK(IN=A) BACK_1(IN=B);
         BY ID;
         IF A AND B;
    RUN;

     


    • 방법2 : SQL을 사용하여서 ID변수를 기준으로 item변수의 항목이 1개이면서 'a' 인 관측치 항목을 선택
    SAS Programming
    proc sql;
      select a.*
      from   back a,
             (   select id,
                        count(distinct item) as disitnct_item,
                        max(item) as max_item
                 from   back a
                 group by id
                 having count(distinct item) = 1 and max(item) = 'a'
             ) b
      where  a.id = b.id;
    quit;

     


    • 방법3 : having 절을 사용하여서 해당 조건을 만족하는 관측치 선택;
    SAS Programming
    proc sql;
      select *
      from   BACK
      group by id
      having count(distinct item) = 1 and item='a';
    quit;

     

    Results
    OBS    id    item
    
     1      2     a  
     2      2     a  
     3      2     a  
     4      2     a  
     5      7     a  
     6      7     a  
     7      7     a  
     8      7     a

     


     

     

    반응형

    댓글