BookmarkSubscribeRSS Feed

[SAS 활용 노하우] 다양한 데이터 세트 결합 방법

Started ‎03-27-2022 by
Modified ‎03-27-2022 by
Views 7,806

 

 

Concatenating Data Sets

이제까지 행을 기준으로 묶거나(=row bind) 또는 열 기준(=column bind)으로 묶어 데이터 처리 방법을 배워보려고 합니다.

이러한 기능들은 R 프로그램에서는 rbind() 또는 cbind() function으로 처리 할 수 있습니다.

Row Bind Data Sets

 

R에서는 rbind()는 matrix나 dataframe을 row끼리 묶게 해주는 함수입니다.

SAS에서는 Data step을 통해서 row끼리 묶게 해줄 수 있습니다.

 

Data step 의 syntanx는 아래와 같습니다.

 

DATA new-data-table-name;
SET data-table-1 data-table-2 … ;
RUN;

 

 

2개의 데이터 세트를 통해서 row 끼리 묶는 방법을 알아보고자 합니다.

예제 데이터 셋은 덴마크(empsdk) 종업원 데이터 세트와 프랑스(empsfr) 종업원 데이터 세트가 있습니다. 두 개의 데이터 세트를 쌓아 올려 「employee all」이라고 하는 새로운 데이터 세트를 만들려합니다.

 

 

image (2).png

 

 

# SAS CODE

 

data empsall;
   set empsdk empsfr;
run;

덴마크 종업원 데이터 세트와 프랑스 종업원 데이터 세트를 하나의 SET 스테이트먼트에 전달하고, 겹쳐 쌓기만 하면 됩니다.

중요한 점은 데이터 집합의 열 이름이 완전히 동일해야 합니다.

 

 

Column Bind Data Sets

데이터 세트 내에 변수 이름이 이름(names)거나 자택(home) 등, 2개의 데이터 세트를 가지고 있는 경우,

컬럼에 바인드하여 여러 SET 문을 사용합니다.

SET 스테이트먼트 다음 구문에 나타나듯이 각 SET 문에는 자체 데이터 세트가 있어야 합니다.

 

 # SAS CODE

 

DATA new-data-table-name;
  SET data-table-1;
  SET data-table-2;
  …
  SET data-table-n;
RUN;

 

 

 

1) Column bind

예시를 들어 설명하겠습니다.

names라는 데이터 세트와 home 이라는 데이터 세트가 있습니다. 이 둘을 column bind를 통해서 cbind 라는 새로운 데이터 세트를 생성하겠습니다.

 

image (3).png

 

 # SAS CODE

 

data cbind;
   set names;
   set homes;
run;

 

 

SET statement 를 이용해서 다른 차원의 데이터 세트를 결합할 수 있습니다. 데이터 세트 길이는 SET 문에서 제공된 첫 번째 데이터 세트의 길이로 고정됩니다.

2) Column bind - 차원이 다른 데이터 세트

차원이 다른 데이터 세트를 결합히기 위해서는 MERGE statement를 사용합니다.

 

 image (4).png

 

 

 # SAS CODE

 

DATA new-data-table-name;
MERGE data-table-1 data-table-2 …data-table-n;
RUN;

 

 

예를 들어, Vehicle이란 데이터 세트와 Origin이라는 데이터 세트가 있습니다.

Vehicle이란 데이터 세트는 1*6 matrix이며, origin 데이터 세트는 1*3 matrix입니다.

여러 SET 문과 함께 이전 구문을 사용하는 경우 SAS는 실제로 최종 데이터 세트의 관측값 수를 위의 그림과 같이 3개의 관측값으로 줄입니다.

 

 

 

image (5).png

 

 

 

다른 차원의 데이터 세트들을 어떠한 처리 없이 단순 결합 역시 위와 같은 방법으로 진행할 수 있습니다.

Match - Merging Data Sets

MERGE 문의 또 다른 사용법에 대해 알아보겠습니다.

cbind를 수행하면 각 데이터 세트의 공통 변수에 따라 실제로 병합할 수 있습니다.

이번 섹션에서는 아래의 그림과 같이 1:1 , 1:n (= 1: 다) 및 Nonmatches 병합을 수행하는 방법을 배웁니다.

 

 

 image (6).png

 

 

 

 

병합(merge)을 수행하려면 먼저 PROC SORT를 사용하여 공통 변수로 데이터를 정렬해야 합니다.

PROC SORT는 데이터셋을 지정한 변수로 정렬하는데 이용합니다. SAS의 data step문에서 자주 사용하는 명령어 중 하나입니다.PROC SORT 는 항상 by문과 함께 사용됩니다.

지금은 SORT 절차를 사용한 후 DATA 단계와 MERGE 문을 사용할 수 있습니다.

일부 공통 변수에 따라 병합하려는 모든 데이터 세트를 나열합니다.

1) One-to-One Merge

 

 image (7).png

 

 

emps(=직원)이라는 데이터 세트와 phone(=전화)라는 데이터 세트가 있고 위의 그림과 같이 EmpID와 Phone 변수가 있습니다.

각 데이터 세트에는 있는 공통 변수인 직원 ID(EmpID)를 통해서 새로운 데이터를 만들기 위해서 Merge를 하려고 합니다.

 

 

proc sort data=emps;
by EmpID;
run;

proc sort data=phone;
by EmpID;
run;

data mergedemps;
merge emps phone;
run;

 

 

 

 

 image (8).png

 

 

 

위의 코드를 보면 SORT를 먼저 수행하고 데이터 세트 병합하기 위해 MERGE를 수행하고 BY 문에 공통 변수를 넣어 mergedemps 라는 데이터 세트를 만듭니다.

2) One-to-Many Merge

예시를 통해 일대다 병합을 알아보겠습니다.

 image (9).png

 

 

 

emps 데이터 세트에서 empID와 phone 데이터 세트의 empID변수가 공통 변수입니다.

MERGE를 수행하면 최종 데이터 세트에 필요한 경우 이름과 성별 변수의 여러 인스턴스가 있습니다.

이 예에서 Togar에 대한 두 개의 관측치가 있습니다. SAS는 필요한 경우 새 데이터 세트의 데이터를 채웁니다.

 

 

3) Nonmatch Merging

 

 

 image (10).png

 

 

 

image (11).png

 

 

Nonmatch 병합을 수행하기 위해 직원 데이터 세트(=emps) 와 전화 데이터 세트(=phone )의 EmpID변수가 동일한 변수가 있지만 데이터는 일치하지 않습니다.

이러한 데이터 세트를 병합의 결과는 NULL 값으로 채워집니다.

그래서 Kiley는 전화번호가 없고 마지막 결과 데이터 세트의 관찰에는 해당 전화번호의 이름이나 성별에 대한 정보가 없습니다.

 

 

Version history
Last update:
‎03-27-2022 08:07 AM
Updated by:
Contributors

sas-innovate-wordmark-2025-midnight.png

Register Today!

Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.


Register now!

Article Labels
Article Tags