* 시종기 구간 자료 오류로 인하여 재산정;
DATA BACK;
INPUT PLCY_NO $8. APPL_START_DATE2 : $8. APPL_END_DATE2 : $8.;
CARDS;
K090801 20010101 29991231
K090801 20110505 29991231
K120402 20010101 20120802
K120402 20010101 29991231
K120402 20120802 29991231
K120803 20120801 20120803
K120803 20120801 29991231
K120803 20120803 29991231
K120904 20120101 20120601
K120904 20120601 20121231
K120905 20120101 20120301
K120905 20120301 20120601
K120905 20120601 20120901
K120905 20120601 20120901
K120905 20120901 20121231
K120906 20010101 29991231
;
******************************************************;
* 방법1 : PROC SQL을 사용하여 전후 날짜 조인 ;
******************************************************;
* 보험기간을 일열로 재배열;
DATA BACK1;
SET BACK;
BAS_DATE = APPL_START_DATE2;
OUTPUT;
BAS_DATE = APPL_END_DATE2;
OUTPUT;
KEEP PLCY_NO BAS_DATE;
RUN;
* 동일 일자 제거;
PROC SORT DATA=BACK1 NODUPKEY;
BY PLCY_NO BAS_DATE;
RUN;
DATA BACK2;
SET BACK1;
BY PLCY_NO BAS_DATE;
IF FIRST.PLCY_NO THEN BAS_SEQ=1;
ELSE BAS_SEQ+1;
RUN;
* 현재(N)과 이전 시점(N-1) 조인;
PROC SQL;
CREATE TABLE BACK3 AS
SELECT A.PLCY_NO,
A.BAS_DATE AS T_APPL_START_DATE,
B.BAS_DATE AS T_APPL_END_DATE
FROM BACK2 A
LEFT JOIN BACK2 B
ON A.PLCY_NO = B.PLCY_NO
AND A.BAS_SEQ+1 = B.BAS_SEQ
WHERE B.PLCY_NO IS NOT NULL;
QUIT;
******************************************************;
* 방법2 : 배열을 사용하여 재배치 ;
******************************************************;
* 기준 변수별 날짜 최대 건수;
proc sql ;
SELECT MAX(N) INTO :MAX_CNT
FROM (SELECT COUNT(*) AS N
FROM BACK
GROUP BY PLCY_NO);
quit;
%PUT &MAX_CNT;
* 세로 자료를 가로로 변경;
DATA BACK1_1;
SET BACK1;
BY PLCY_NO;
ARRAY TRANS{&MAX_CNT} $;
RETAIN TRANS:;
IF FIRST.PLCY_NO THEN DO;
* RETAIN에 대한 배열 초기화;
DO J=1 TO DIM(TRANS);
TRANS(J) = '';
END;
I=1;
END;
TRANS(I) = BAS_DATE;
I+1;
IF LAST.PLCY_NO THEN OUTPUT;
RUN;
* 배열을 사용하여 구간을 재정리;
DATA BACK1_2;
SET BACK1_1;
BY PLCY_NO;
ARRAY TRANS{&MAX_CNT} $;
DO I=1 TO &MAX_CNT-1;
T_APPL_START_DATE = TRANS(I);
T_APPL_END_DATE = TRANS(I+1);
IF T_APPL_END_DATE NE '' THEN OUTPUT;
END;
DROP I J TRANS:;
RUN;
Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9.
Early bird rate extended! Save $200 when you sign up by March 31.