본문 바로가기
SAS

[SAS] sas sql과 macro(매크로) 조합해서 반복적인 데이터 결합(join)하기

by SASBIGDATA김진휘 2014. 3. 19.

sas에서 처리시간을 줄이기 위해 sql문을 이용하여 데이터 결합을 한다. sort(정렬) 과정이 필요없으므로

그런데 만약 이와 같은 방법으로 여러개의 데이터들을 계속 반복적으로 해야된다면

sql문에 macro(매크로)문을 조합하여 사용할 수가 있다.


sql문으로 left join을 하는데 같은 방법으로 여러번 반복 작업을 해야 하기 때문에 

sql과 macro와 같이 사용하는 방법을 알아보자.


[코딩과정]

jin1, jin2, jin3이라는 데이터셋이 있고,hwi1, hwi2, hwi3이라는 데이터셋이 있다.

이 두개의 데이터셋을 각각 left join하여 jinhwi1부터 jinhwi3까지 데이터셋을 sql과 macro를 이용해 생성한다.


create table 뒤에 새로 생성할 데이터셋명을 지정하는데 여기서 기존의 jin1같은 데이터셋 명을 지정해 버리면 

macro과정에서 덮어씌워 버리기 때문에 잘못된 결과를 가져온다. 

그러므로 꼭 새로운 데이터셋 명을 지정하도록 한다.



위와 같이 sql문과 macro문을 병행해서 사용하면 위의 사진은 jinhwi1 데이터셋 결과만 보여줬지만 이와같은 반복된 결과인 jinhwi2, jinhwi3까지 데이터셋이 자동으로 생성된다.



[sas 코딩과정]


data jin1; input key $ grade@@; cards;

111 1 222 2 333 3 222 2

; run;

data jin2; input key $ grade@@; cards;

111 1 222 2 333 3 222 2

; run;

data jin3; input key $ grade@@; cards;

111 1 222 2 333 3 222 2

; run;

data hwi1; input key $ cost@@; cards;

222 2000 222 2500 111 1800 111 1900

333 3000 222 2200 333 3900 111 1200

; run;

data hwi2; input key $ cost@@; cards;

222 2000 222 2500 111 1800 111 1900

333 3000 222 2200 333 3900 111 1200

; run;

data hwi3; input key $ cost@@; cards;

222 2000 222 2500 111 1800 111 1900

333 3000 222 2200 333 3900 111 1200

; run;


%macro ace(mc);


proc sql;

create table jinhwi&mc as

select haha.*,hoho.*

from jin&mc as haha left join hwi&mc as hoho

on haha.key=hoho.key;

quit;


%mend;


%ace(mc=1);

%ace(mc=2);

%ace(mc=3);



www.sasbigdata.com 김진휘


댓글