1. MERGE2. ์กฐ์ธ์ ์ข
๋ฅ2.1 full join2.2 inner join2.3 right join2.4 left join2.5 ๋๋ค 0์ธ ๊ฒฝ์ฐ3. SET3.1 ์นผ๋ผ๋ช
์ด ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ3.2 ์นผ๋ผ์ ์์ฑ์ด ๋ค๋ฅธ ๊ฒฝ์ฐ
1. MERGE
์ด๋ฒ ์ฑํฐ์์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒฐํฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ์ฐ์ ๋ฐ์ดํฐ์ ์ํ์ 1๋ 1๊ฒฐํฉ๋ถํฐ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ์๋ ์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ฏธ๋ฆฌ ๋ณด์๊ณ ์ด๋ป๊ฒ ๊ฒฐํฉํ ์ง ์๊ฐํด๋ณด์ธ์.

mysas.subject_test1_1
data mysas.subject_test1_1; input id name $9. class_ $ subject $ score ; datalines; 101 ์ดํธ์ค 1๋ฐ computer 92 102 ์ดํธ์ค 1๋ฐ computer 80 201 ์ด๊ธธ๋ 2๋ฐ computer 90 202 ์ด์คํธ 2๋ฐ computer 86 ; run; proc print data=mysas.subject_test1_1; run;

mysas.subject_test2
data mysas.subject_test2; input id phonenumber $16.; datalines; 101 010-1234-5678 102 010-9876-5432 201 010-4567-1565 202 010-7536-9512 ; run; proc print data=mysas.subject_test2; run;
๊ณตํต๋ ๊ธฐ์ค๋ณ์๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํฉ๋๋ค.
data mysas.join; merge mysas.subject_test1_1 mysas.subject_test2; by id; run; proc print data=mysas.join; run;
๋ก๊ทธ๋ฅผ ๋ณด์๋ฉด ์๋ฌ๊ฐ ๋ํ๋ ๊ฒ์
๋๋ค. by ๋ณ์๊ฐ ๋ฐ์ดํฐ ์
์ ๋ํด์ ์ ๋ ฌ๋์ง ์์์ต๋๋ค. ๋ณํฉํ๊ธฐ ์ ์ ๊ธฐ์ค๋ณ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ๊ฐ์ ๋ฐ์ดํฐ์
์ ์ ๋ ฌ์ ํด์ค์ผํฉ๋๋ค.
BY ๋ณ์
๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํฉ๋๋ค. proc sort data=๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ช .๋ฐ์ดํฐ์ ; by ์ ๋ ฌํ ๋ณ์; run;
proc sort data=mysas.subject_test1_1; by id; run; proc sort data=mysas.subject_test2; by id; run;
๊ฐ๊ฐ์ ๋ฐ์ดํฐ์
์ ์ ๋ ฌํ ํ์ ๋ค์ ๊ฒฐํฉ์ ํ๋ฉด 1:1 ์ํ์ ๊ฒฐํฉ์ด ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ๋ํ, ๊ฐ๋ก๋ก ๊ฒฐํฉ๋๋ค๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.

2. ์กฐ์ธ์ ์ข ๋ฅ

2.1 full join
full join์ ์งํฉ์์์ ํฉ์งํฉ์
๋๋ค. ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ณ ์ด๋ป๊ฒ ํฉ์ณ์ง์ง ์๊ฐํด๋ณด์๊ณ ์ค์ต์ ํด๋ณด์๊ณ ์ฝ๋๋ฅผ ์คํํด ๋ณด์๋ฉด ๋ณด๋ค ์ดํดํ๊ธฐ ์ฝ์ต๋๋ค.
phonehw์ด๋ผ๋ ํ
์ด๋ธ์ ๋ง๋ค๋๋ก ํ๊ฒ ์ต๋๋ค.
data mysas.phonehw; input id name $10. type $ number$16.; datalines; 101 ์ดํธ์ค company 004-050-1200 101 ์ดํธ์ค phone 010-1234-5678 102 ์ดํธ์ค home 012-134-7894 201 ์ด๊ธธ๋ phone 010-4567-1565 202 ์ด์คํธ phone 010-7536-9512 ; run; proc print data=mysas.phonehw; run;
์ด์ ์ ๋ง๋ค์๋
mysas.subject_test1_1
๊ณผ mysas.phonehw
๋ฅผ ๋ณํฉํ๋๋ก ํ๊ฒ ์ต๋๋ค. mysas.subject_test1_1
์ด ์์ผ์๋ค๋ฉด ์๋ ์ฝ๋๋ฅผ ์คํํด์ค๋๋ค.data mysas.subject_test1_1; input id name $9. class_ $ subject $ score ; datalines; 101 ์ดํธ์ค 1๋ฐ computer 92 102 ์ดํธ์ค 1๋ฐ computer 80 201 ์ด๊ธธ๋ 2๋ฐ computer 90 202 ์ด์คํธ 2๋ฐ computer 86 ; run; proc print data=mysas.subject_test1; run;
๋ณํฉํ๊ธฐ ์ ์ ๊ผญ ์ ๋ ฌ์ ํด ์ฃผ์๊ธธ ๋ฐ๋๋๋ค.
proc sort data=mysas.phonehw; by id; run; proc sort data=mysas.subject_test1_1; by id; run;
data mysas.fulljoin; merge mysas.subject_test1_1 mysas.phonehw; by id; run; proc print data=mysas.fulljoin; run;

2.2 inner join
inner join์ ์งํฉ์์์
๊ต์งํฉ
์
๋๋ค.

mysas.phonehw2 ํ
์ด๋ธ์ ๋ง๋ค์ด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
data mysas.phonehw2; input id name $10. type $ number$16.; datalines; 101 ์ดํธ์ค company 004-050-1200 101 ์ดํธ์ค phone 010-1234-5678 102 ์ดํธ์ค home 012-134-7894 201 ์ด๊ธธ๋ phone 010-4567-1565 202 ์ด์คํธ phone 010-7536-9512 203 ์ด์ค๊ธธ phone 010-1563-4595 ; run; proc print data=mysas.phonehw2; run;
๋ง์ฐฌ๊ฐ์ง๋ก ๋ณํฉํด ์ฃผ๊ธฐ ์ ์ ์ ๋ ฌ์ ํด์ผ ํฉ๋๋ค.
proc sort data=mysas.phonehw2; by id; run; proc sort data=mysas.subject_test1_1; by id; run;
data mysas.innerjoin; merge mysas.phonehw2(in=emps) mysas.subject_test1_1(in=cell); by id; if emps=1 and cell=1; run; proc print data=mysas.innerjoin; run;

๊ฒฐ๊ณผ๋ฅผ ๋ณด์๋ฉด name ๋ณ์๊ฐ ๋ ํ
์ด๋ธ์์ ์ค๋ณต๋๋ ๊ฐ๋ค๋ง ์ถ๋ ฅํด ์ฃผ๋ ๊ฒ์ ๋ณด์ฌ์ค๋๋ค.
2.3 right join
์ค๋ฅธ์ชฝ ํ
์ด๋ธ
๊ธฐ์ค์ผ๋ก ํฉ์ณ์ง๋๋ค.data mysas.rightjoin; merge mysas.subject_test1_1(in=emps) mysas.phonehw2(in=cell); by id; if emps=0 and cell=1; run;

์๋ ๋ฐ์ดํฐ์ ๋น๊ตํด๋ณด๊ฒ ์ต๋๋ค.


2.4 left join
์ผ์ชฝ ํ
์ด๋ธ
๊ธฐ์ค์ผ๋ก ํฉ์ณ์ง๋๋ค.data mysas.data11; merge mysas.data3(in=emps) mysas.data9(in=cell); by name; if emps=1 or cell=0; run;

2.5 ๋๋ค 0์ธ ๊ฒฝ์ฐ
๋๋ค 0์ธ ๊ฒฝ์ฐ๋ ์ผ์ชฝ ํ
์ด๋ธ๊ณผ ์ค๋ฅธ์ชฝ ํ
์ด๋ธ ์ค ์๋ก ๊ฒน์น์ง ์๋ ๋ถ๋ถ์ ์ถ๋ ฅํด ์ค๋๋ค. ๊ต์งํฉ์ ๋ฐ๋์ธ ๋ ํ
์ด๋ธ์
์ฐจ์งํฉ
์ ์๋ฏธํฉ๋๋ค.data mysas.data11; merge mysas.data3(in=emps) mysas.data9(in=cell); by name; if emps=0 or cell=0; run;

3. SET
๋ฐ์ดํฐ์ ์์ง์ 1๋ 1๊ฒฐํฉ (๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ๋์ผํ ๋)ํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
data ๋ผ์ด๋ธ๋ฌ๋ฆฌ.ํตํฉ๋ฐ์ดํฐ์ ; set ๋ผ์ด๋ธ๋ฌ๋ฆฌ.๋ฐ์ดํฐ์ 1 ๋ผ์ด๋ธ๋ฌ๋ฆฌ.๋ฐ์ดํฐ์ 2; run;
data mysas.set1; set mysas.subject_test1_1 mysas.phonehw2; run; proc print data=mysas.set1; run;

์์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด set์ ์ธ๋ก๋ก ์ถ๋ ฅ๋๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
3.1 ์นผ๋ผ๋ช ์ด ์ผ์นํ์ง ์๋ ๊ฒฝ์ฐ
1) ๋ง์ฝ ํด๋น ์นผ๋ผ์ ๋ฐ์ดํฐ๊ฐ ์๋ค๋ฉด, ์๋๋๋ก
๋น ์นธ
์ผ๋ก ์ถ๋ ฅํฉ๋๋ค.2) ๋ ํ
์ด๋ธ์ ๋์ผ ์ด๋ฆ ์นผ๋ผ ๊ฐ ๋ฐ์ดํฐ ๊ธธ์ด๊ฐ ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ SET๋ช
๋ น์ด๋ก ๋ ๊ฐ ์ด์์ ํ
์ด๋ธ์ ์ด์ด๋ถ์ผ ๋ ๊ธฐ์ค์ด ๋๋ ๊ฒ์
์ฒซ ๋ฒ์งธ๋ก ์ง์ ๋ ํ
์ด๋ธ
์
๋๋ค. ์์์ ์ค๋ช
ํ๋ฏ์ด SAS๋ ๋ช
๋ น์ด๋ฅผ
์
์์๋ถํฐ ์ฝ๊ณ ์ผ์ชฝ
์์๋ถํฐ ์ฝ์ต๋๋ค. ์ด ๊ฐ์ ๊ธฐ์ค์ ๋ฐ๋ผ SET๋ช
๋ น์ด์์ ๊ฐ์ฅ ์์ ์๋ ํ
์ด๋ธ์ ๋จผ์ ์ฝ์ด ๋ค์ด๊ฒ ๋ฉ๋๋ค. ์ด์ ๋ฐ๋ผ ํตํฉ๋ ํ
์ด๋ธ์ ์นผ๋ผ NAME์ ๊ธธ์ด๊ฐ 10์ธ ์ํ๋ก ์์ฑ์ด ๋ฉ๋๋ค. ์ด ์ํฉ์์ ๋ ๋ฒ์งธ๋ก ๋์ค๋ ํ
์ด๋ธ B์ ์นผ๋ผ NAME์ ๊ธธ์ด๊ฐ 14๋ผ๋ฉด, ํ
์ด๋ธ B์ ๋ค์ชฝ ๊ธธ์ด๊ฐ 2๋งํผ ์๋ฆฌ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ ๊ธฐ์ ์นผ๋ผ๋ค์ ํ์ ์ด์ด์ค ๋๋ ๊ธธ์ด๋ฅผ ์ ์ฌํ ์ดํผ์
์ผ ํฉ๋๋ค.
3.2 ์นผ๋ผ์ ์์ฑ์ด ๋ค๋ฅธ ๊ฒฝ์ฐ
๋ณ์ Gender ์ด(๊ฐ) ๋ชจ๋ ๋ฌธ์์ ์ซ์๋ก ์ ์๋์๋ค๋ฉด Error๊ฐ ๋๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ ์ค ํ ๋ณ์์ ์ด๋ฆ์ ๋ฐ๊พธ๊ฑฐ๋, ํ
์ด๋ธ์ ์์ฑํ ๋ ๋ณ์์ ์์ฑ์ ๋์ผํ๊ฒ ๋ง๋ค๊ฑฐ๋, ์ด๋ฏธ ๋ง๋ค์ด์ง ํ
์ด๋ธ์ ์์ฑ์ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.