BookmarkSubscribeRSS Feed

[SAS 프로그래밍 고수 백승민] 구분자가 포함된 관측치 분리하기 (COUNT, ARRAY, SCAN)

Started ‎06-11-2020 by
Modified ‎06-12-2020 by
Views 96

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

 

* 세미콜론 데이터 읽기를 위하여 DATALINES4를 사용;
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값을 선택;
PROC SQL NOPRINT;
  SELECT MAX(COUNT(VAR,';'))+1 INTO :MAX_CNT
  FROM   BACK;
QUIT;

 

 


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

Version history
Last update:
‎06-12-2020 02:42 AM
Updated by:
Contributors

hackathon24-white-horiz.png

The 2025 SAS Hackathon Kicks Off on June 11!

Watch the live Hackathon Kickoff to get all the essential information about the SAS Hackathon—including how to join, how to participate, and expert tips for success.

YouTube LinkedIn

Article Labels
Article Tags