BookmarkSubscribeRSS Feed

PROC SQL 데이터 비교 1

Started 3 weeks ago by
Modified 3 weeks ago by
Views 98

데이터 비교

실무에서 데이터를 비교하는 경우가 많습니다.

“같은 데이터가 맞는지”, “어떠한 부분이 달라졌는지”를 확인하는 과정, 운영계와 집계 테이블, 이관 전후 데이터, 수정 전후 쿼리 결과를 비교하는 상황에서 어떤 데이터가 있고, 어떤 데이터가 없는지를 정확히 확인하고나서 검증을 완료할 수 있습니다.

데이터 비교를 위해서 PROC SQL 문의 테이블 비교 예시를 통해, 실무에서 데이터를 중복 없이 결과값을 직관적으로 보거나, 복잡한 Join 없이 누락 여부를 명확하게 확인하는 방법에 대해서 알아보겠습니다.

 

■ 데이터셋: employee_part1 (4명), employee_part2(6명)

 

데이터셋은 2개로 동일하게 사원 ID,사원 이름, 급여의 칼럼으로 구성되어 있습니다.

 

 

 

data employee_part1;
    input empid name $ salary;
    datalines;
101 Kim 5000
102 Lee 6000
103 Park 5500
104 Choi 4800
;
run;

data employee_part2;
    input empid name $ salary;
    datalines;
103 Park 5500
104 Choi 4800
105 Jung 5200
106 Kang 7000
107 Cho 4500
108 Yoon 6200
;
run;

 

 

 

■ 두 데이터셋 사이의 차집합: EXCEPT

 

proc sql;
select * from employee_part1
except
select * from employee_part2;
run;

 

image.png

 

 

 

두 데이터간의 차집합을 구하기 위해, PROC SQL의 EXCEPT 구문을 활용했습니다.

EXCEPT란 다음과 같습니다.

1) 1번째 SELECT 결과 − 두 번째 SELECT 결과

2) 두 데이터셋에 완전히 동일한 행(empid, name, salary 모두 동일) 이 있으면 제거됨

3) DISTINCT가 기본적으로 적용되서 중복 행이 자동으로 제거됨.

그 결과, employee_part1에만 존재하는 사원만 남습니다.

PROC SQL의 EXCEPT 구문은 비교하기 위한 데이터셋의 컬럼 개수, 순서, 데이터 타입이 동일해야합니다.

컬럼명이 같아도 순서가 다를 경우 다른 컬럼으로 인식할 수 있습니다.

■ 두 데이터셋 사이의 공통 행 출력: INTERSECT

 

 

proc sql;
    select empid, name, salary
    from employee_part1

    intersect

    select empid, name, salary
    from employee_part2;
quit;

 

INTERSECT 구문은 행 전체가 동일한 경우 교집합으로 판단해 공통의 행을 출력합니다.

EXCEPT 구문과 동일하게 칼럼의 개수, 순서, 데이터타입이 동일해야합니다.

salary 기준으로만 공통 여부를 출력하고 싶으면 select 문에서 salary 칼럼만 입력하면 됩니다.

 

 

 

proc sql;
    select salary
    from employee_part1

    intersect

    select salary
    from employee_part2;
quit;

 

 

image.png