본문 바로가기
프로그래밍/SAS

002. [sort, merge] SAS 정렬 & 파일 합치기

by life_is_egg 2021. 8. 20.
반응형

 

 목차 

1. 데이터 정렬

2. 파일 합치기(merge)

3. 파일 합치기(set)


 

1. 데이터 정렬

데이터나 파일을 합쳐야 하는 경우가 있는데,

엑셀로 직접 데이터를 복붙해서 만드는 것 대신 sas 코드를 사용하여 한 번에 합칠 수 있다.

파일을 병합하기 전에 가장 먼저 할 일은 데이터 정렬이다.

 

 

아래의 데이터 파일을 이용해 불러오기와 내보내기를 할 것이다.

Kaggle에서 받은 데이터로, 랭크 300위까지 추출하여 파일을 합칠 수 있도록 전처리했다.

 

vgsales_NA,EU.csv
0.02MB
vgsales_JP,OT,Gl.csv
0.02MB

Vgsales_NA,EU 파일을 이용하여 데이터 정렬을 하려고 한다.


Proc sort로 원하는 변수명을 기준으로 데이터를 정리할 수 있다.

연도(year) 순서대로 정렬을 하고 싶다면 by 부분에 변수명(year)를 적으면 된다.

proc sort data=data-set ;
by variable ;

run;

 

proc print data=data-set ;

run;

Proc print를 통해 데이터를 살펴보면 아래와 같이 정렬된 모습을 볼 수 있다.

 

 

만약 변수를 추가해서 순서대로 정렬을 하고 싶다면 변수명만 추가해주면 된다.

year에 대해 정렬된 후 publisher에 대해 정렬된다.

proc sort data=data-set ;
by variables ;

run;

 

- 정렬 결과 -

왼쪽(year 정렬) ☞ 오른쪽(year, genre 정렬)


2. 파일 합치기(merge)

 

데이터를 가로로 붙이고 싶을 때 사용하는 방법이다. (가로결합)

 

(1) 데이터의 개수가 같을 때

 

데이터 raw1
데이터 raw2

 

먼저, 합치기 원하는 데이터를 정렬한다.

각 데이터의 순서와 개수가 동일하다면 sort 순서는 생략 가능하다.

 

 

기준이 되는 변수 중심으로 데이터를 결합하고자 한다면 특정 변수를 by를 이용해 입력해야 한다.

data data-set ;
merge data-set data-set ... ;
by variable ;

run;

 

 

raw1과 raw2 파일이 아래처럼 rank를 기준으로 병합되었다.


(2) 데이터의 개수가 다를 때

 

합치고 싶은 파일의 데이터 개수가 같다면 너무 좋겠지만 아닌 경우가 있다.

 

그럴 때 2-(1)의 방법대로 merge를 하면 데이터에 공란이 생긴다.

 

 

데이터 분석에 방해를 주기 때문에 in if을 사용해 해당 변수에 데이터가 존재하지 않으면 삭제한다.

data data-set ;
merge data-set(in=variable) data-set(in=variable) ... ;
by variable ;

if variable and variable ;

run;

var1과 var2는 임시 변수로, 0과 1을 가진다.

- 0 : 값이 없는 경우

- 1 : 값이 있는 경우

 

두 데이터셋이 둘 다 공통적으로 가지고 있는 데이터만 가지고 싶다면

if var1 and var2;라고 입력하면 된다.

 

또는,

if var2 = 1; 을 사용해서 'raw2가 가지고 있는 데이터만 뽑아줘' 라는 명령도 가능하다.


결과적으로 JP_Sales, Other_Sales, Global_Sales 데이터가 없던 

Rank 3-8위까지 삭제된 것을 알 수 있다.


3. 파일 합치기(set)

 

데이터를 세로로 붙이고 싶을 때 사용하는 방법이다. (세로결합)

 

(1) 변수명과 개수가 일치하는 경우

데이터 A (Rank 1~4위)
데이터 B (Rank 5~8위)

데이터 A의 4행 아래에 데이터 B의 5행을 붙이고자 한다면 아래의 코드를 쓰면 된다.

set 마지막 행 다음에 다른 데이터의 첫번째 행을 합쳐주는 역할을 한다.

data data-set ;
set data-set data-set ... ;

run;

 

Rank 1위부터 8위까지 데이터가 결합된 것을 볼 수 있다.


(2) 변수명과 개수가 일치하지 않는 경우

drop/delete 이용

나중에 추가


(3) 특정 변수를 기준으로 나열

 

특정 변수를 기준으로 나열하고 싶을 때는 먼저 정렬을 해야한다.

 

sort 이후에 merge와 마찬가지로, by를 이용해 기준이 될 변수를 적어주면 된다.

data data-set ;
set data-set data-set ... ;
by variable 

run;

 

 

year 변수를 기준으로 연도가 오름차순으로 정리된 후 데이터가 결합했다.

반응형

댓글