BookmarkSubscribeRSS Feed

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

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

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

 

* 세미콜론 데이터 읽기를 위하여 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

SAS Innovate 2025: Save the Date

 SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!

Save the date!

Article Labels
Article Tags