< Q_02_11. 두 데이터셋을 옆으로 합치기 - MERGE 문 사용
본문 바로가기
SAS연습200제/SAS데이터셋활용하기

Q_02_11. 두 데이터셋을 옆으로 합치기 - MERGE 문 사용

by sas 2025. 3. 18.

SAS에서 두 개 이상의 데이터셋을 옆으로 합치려면 MERGE 문을 사용합니다. MERGE 문은 공통 변수를 기준으로 데이터를 가로 방향으로 병합하며, 기본적으로 BY 문과 함께 사용됩니다. 이 방법은 두 데이터셋 간의 공통 키를 기준으로 관측치가 병합되기 때문에, 공통 변수가 필요합니다.

기본 구문

data merged_data;
    merge dataset1 dataset2;
    by key_variable;
run;
  • dataset1과 dataset2: 병합할 두 데이터셋입니다.
  • key_variable: 데이터셋을 병합할 때 사용할 공통 변수(키)입니다.
  • merged_data: 병합된 결과를 저장할 새 데이터셋입니다.

예제 코드

아래 예제에서는 data1과 data2 데이터셋을 id 변수로 병합합니다.

data data1;
    input id name $ score1;
    datalines;
    1 Alice 85
    2 Bob 90
    3 Charlie 88
    ;
run;

data data2;
    input id age score2;
    datalines;
    1 20 78
    2 21 82
    4 David 75
    ;
run;

data merged_data;
    merge data1 data2;
    by id;
run;

이 예제에서:

 
  • data1과 data2 데이터셋을 id 변수를 기준으로 병합합니다.
  • 결과적으로 id가 동일한 관측치가 하나의 행으로 합쳐집니다.

MERGE 문의 병합 유형

  • 일대일 매칭 (One-to-One): BY 변수의 값이 일대일로 매칭되는 경우.
  • 일대다 매칭 (One-to-Many): 한 데이터셋의 키 값이 다른 데이터셋의 여러 행과 매칭되는 경우.
  • 다대다 매칭 (Many-to-Many): 두 데이터셋 모두에서 키 값이 여러 행과 매칭되는 경우.

각 병합 유형의 주의사항

  • 두 데이터셋이 사전에 BY 변수로 정렬되어 있어야 합니다.
  • 누락 값: 매칭되지 않는 BY 변수의 경우 SAS는 누락(.) 값을 채웁니다.

병합 옵션 예제

1. IN= 옵션 사용하기

IN= 옵션을 사용하면 특정 데이터셋에서 관측치가 존재하는지 여부를 확인할 수 있습니다.

data merged_data;
    merge data1(in=in1) data2(in=in2);
    by id;
    if in1 and in2; /* 두 데이터셋에 모두 존재하는 관측치만 포함 */
run;

이 코드에서는 data1과 data2에 모두 존재하는 id 값만 결과에 포함됩니다.

2. 일부 데이터셋의 관측치만 포함하기

특정 데이터셋의 관측치만 포함하도록 할 수 있습니다.

data merged_data;
    merge data1(in=in1) data2(in=in2);
    by id;
    if in1; /* data1에만 존재하는 관측치 포함 */
run;

위 코드는 data1에 존재하는 id만 포함하고, data2에만 있는 관측치는 제외합니다.

요약

 
  • MERGE 문은 공통 변수를 기준으로 데이터를 가로 방향으로 병합합니다.
  • BY 변수를 사용하여 공통 키를 지정하며, 데이터는 반드시 정렬되어야 합니다.
  • IN= 옵션을 사용하여 특정 데이터셋에서만 존재하는 관측치를 필터링할 수 있습니다.