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= 옵션을 사용하여 특정 데이터셋에서만 존재하는 관측치를 필터링할 수 있습니다.
'SAS연습200제 > SAS데이터셋활용하기' 카테고리의 다른 글
Q_02_13. 두 데이터셋을 옆으로 합치기(1) -MERGE/BY 문 사용 (0) | 2025.03.18 |
---|---|
Q_02_12. 두 데이터셋을 옆으로 합치기 -같은 변수 있는 경우 (0) | 2025.03.18 |
Q_02_10. 동일한 데이터셋에서 처음과 마지막 관측치 구하기 - SET a/BY 문 (0) | 2025.03.18 |
Q_02_09. 두 DATASET을 아래위로 합치기 - SET a b/BY 문 (0) | 2025.03.18 |
Q_02_08. 데이터셋 아래 위로 합치기 - 데이터 길이가 다른 경우 (0) | 2025.03.18 |