본문 바로가기
SAS

[배열] 구분자가 포함된 관측치 분리하기 (COUNT,...

by 기서무나구물 2018. 11. 22.

포스팅 목차

     

    Programming Category (English)728x90

    [답변]***********************************************************;

    * 세미콜론 데이터 읽기를 위하여 DATALINES4를 사용;

    SAS Programming
    DATA BACK;
      INPUT nm $1. var $30.;
    DATALINES4;
    1 aaa;bbb;ccc
    2 aaa;ddd;eee;fff
    3 ABC;GGG
    4 AAA;KKK;PPP;GGG;DDD;EEE
    ;;;;
    RUN;

     

     

    * 각 관측치에서 세미콜론의 발생 건수 카운트하여 그중에 MAX값을 선택;

    SAS Programming
    PROC SQL NOPRINT;
      SELECT MAX(COUNT(VAR,';'))+1 INTO :MAX_CNT
      FROM   BACK;
    QUIT;

     

    SAS Programming
    DATA BACK1;
     SET BACK;    
         ARRAY NAME(&MAX_CNT) $;
         DO I=1 TO &MAX_CNT;
           
    
            * SCAN 함수를 사용하여서 세미콜론을 구분하여서 각각의 개별 값을 변수에 넣음;
    
            NAME(I) = SCAN(VAR,I,';');
    
            * 가로 변수의 값을 세로로 설정하여서 NEW_VAR에 넣음;
    
            NEW_VAR = NAME(I);
    
            * 공백아닌 즉 NM변수값이 1에서는 AAA BBB CCC 이외의 값은 출력하지 않음(NM=6의 변수값이 6개가 할당이 되        * 어서 NM=1에서도 6개의 관측치가 출력됨);
            * 전체 플로우를 확인 하기 위해서는 아래의 IF절을 => OUTPUT;
            * 으로 대체하고, KEEP문장을 삭제하신후에 출력결과를 확인 하시면 이해가 빠르실듯 합니다.;
            * 단, 관측치의 중간에 공백이 들어간 경우에는 추가 로직이 필요할듯 합니다; 
    
            * OUTPUT;
            IF NEW_VAR NE '' THEN OUTPUT;
         END;
         *KEEP NM NEW_VAR;
         KEEP NM NEW_VAR;     
    RUN;

     

     

    [질문]*******************************************************************************;


    안녕하세요?

    nm       var
    1        aaa;bbb;ccc
    2        aaa;ddd;eee;fff.....

    세미콜론으로 구분되어 병합되어 있는 데이터를 아래와 같이 바꾸려는데 좋은 방법이 있을까요?
    관측치마다 세미콜론 갯수가 다르거든요..

    nm     var
    1      aaa
    1      bbb
    1      ccc
    2      aaa
    2      ddd

     

     

    * 통계분석연구회 : http://cafe.daum.net/statsas

    * 백승민홈페이지 : 



    백승민님의 파란블로그에서 발행된 글입니다.

    Programming Category (English)728x90

     

    반응형

    댓글