포스팅 목차
[답변]***********************************************************;
* 세미콜론 데이터 읽기를 위하여 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
* 백승민홈페이지 :
반응형
'SAS' 카테고리의 다른 글
SAS 프로그램 TIPS 정리 모음 (1) | 2018.11.28 |
---|---|
Enterprise Guide 4.3 : 손쉽게 따라하는 SAS가이... (0) | 2018.11.19 |
Re:sas sql 관한 질문!! (0) | 2018.11.19 |
[MACRO] 매크로 변수 삭제하기. (0) | 2018.11.19 |
[관측치] 데이터 세트에서 마지막 관측치 N개 출력... (0) | 2018.11.19 |
댓글