SAS연습200제/SAS데이터셋활용하기
Q_02_12. 두 데이터셋을 옆으로 합치기 -같은 변수 있는 경우
sas
2025. 3. 18. 21:32
SAS에서 MERGE 문을 사용해 두 데이터셋을 옆으로 합칠 때, 두 데이터셋에 같은 이름의 변수가 있으면 변수 충돌이 발생할 수 있습니다. 이 경우 SAS는 마지막에 병합된 데이터셋의 변수 값을 덮어씁니다. 이러한 문제를 방지하거나 원하는 결과를 얻기 위해 몇 가지 방법을 사용할 수 있습니다.
1. RENAME 옵션을 사용하여 변수 이름 변경하기
두 데이터셋 중 하나의 변수 이름을 변경하여 충돌을 방지할 수 있습니다.
data data1;
input id name score;
datalines;
1 Alice 85
2 Bob 90
;
run;
data data2;
input id age score;
datalines;
1 20 88
2 21 92
;
run;
data merged_data;
merge data1(rename=(score=score1))
data2(rename=(score=score2));
by id;
run;
- RENAME=(score=score1): data1의 score 변수를 score1로 이름 변경하여 충돌을 방지합니다.
- 결과적으로 merged_data에는 id, name, age, score1, score2 변수가 포함됩니다.
2. COALESCE 함수를 사용하여 공통 변수 값 결합하기
만약 공통 변수의 값 중 하나라도 존재하면 해당 값을 선택하고 싶을 경우 COALESCE 함수를 사용하여 결합할 수 있습니다. COALESCE 함수는 첫 번째로 발견된 누락이 아닌 값을 반환합니다.
data merged_data;
merge data1(rename=(score=score1))
data2(rename=(score=score2));
by id;
score = coalesce(score1, score2); /* score1과 score2 중 값이 존재하는 변수 선택 */
run;
이 코드는 score라는 새 변수를 만들어 score1과 score2 중 누락되지 않은 첫 번째 값을 할당합니다.
3. 우선순위 설정하기
두 데이터셋에 같은 변수가 있을 때 특정 데이터셋의 값을 우선적으로 유지하려면, IF 문을 사용하여 조건을 설정할 수 있습니다.
data merged_data;
merge data1(in=a) data2(in=b);
by id;
if a then score_final = score; /* data1의 score를 우선적으로 사용 */
else if b then score_final = score; /* data2의 score를 사용 (data1에 값이 없을 경우) */
run;
이 코드는 data1의 score 값을 우선 사용하고, data1에 값이 없는 경우 data2의 score 값을 사용하여 score_final에 저장합니다.
요약
- RENAME 옵션: 변수 이름을 변경하여 충돌을 방지.
- COALESCE 함수: 값이 존재하는 첫 번째 변수를 선택.
- 우선순위 설정: 특정 데이터셋의 값을 우선 사용.
이 방법들을 활용하면 같은 변수가 있을 때 원하는 방식으로 데이터셋을 병합할 수 있습니다.