Chapter 1. Performing Queries using PROC SQL - (2)

Querying Multiple Tables 

이번에는 여러개의 테이블에서 데이타를 추출하는 내용을 정리해봅니다. 

만약 데이타가 아래 그림처럼 이뤄져있다고 합시다. 

 Table A

 Table B 


Proc SQL을 통해 데이타를 rows (행)을 기준으로 합칠 수 있는데요. 이걸 joining table 이라고 합니다. 



INNER JOIN 방법 



오른쪽처럼 테이블을 만들려고 하는데요. Employee ID넘버로, 하나의 열엔 LastName, Salary, NewSalary 이런 데이타가 이뤄지도록 만들고 싶습니다. 그러니까 총 4개의 column이 되겠네요. Salcomp이라는 테이블엔 EmpID에서 LastName을 가져와야하고, Newsale테이블에 EmpID 변수가 있는데 여기의 salary와 NewSalary를 데려오면 되겠네요. 이때 EmpID가 서로 매치되어있어야겠고요. 


PROC SQL 방법으로 만들 수 있습니다. 코드는 아래와 같아요. 




1. Specifying Columns That Appear in Multiple Tables

먼저 만들고자하는 테이블을 구성하는 열이 뭔지 생각해야겠죠. 그래서 그 열이 어느 테이블에 있는지 불러와야할테고요. 

다음처럼 SELECT 구문을 사용하면 됩니다. 


SELECT 테이블이름.열이름,열이름, 


sasuser라는 라이브러리에 Salcomps와 Newsals라는 데이터가 있고요. 두개의 데이타에 똑같이 EmpID라는 변수가 있습니다. Proc SQL을 통해 EmpID를 어디에 읽을지, 그리고 SELECT 구문을 통해 어떤 열을 불러올지 정하는건데요. 


proc sql;

select salcomp.empid,lastname, 

    newsals.salary,newsalary 


이렇게 데이타이름 뒤에 . (period) 찍고 기준이 되는 열이름 (empID)을 적습니다. 이렇게 지정해주면 newsals데이타에 점(period)찍고 salary라고 적은것도 기준이되느게 아니냐라고 하는데, 그건 아니고요. 이건 syntax때문에 이렇게 적은겁니다. 



2. Specifying Multiple Table Names

from sasuser.salcomps, sasuser.newsals 

라는 문구를 보면, 이렇게 어느 라이브러리에 있는 어떤 데이타를 불러올건지, FROM명령어를 통해 지정해줍니다. 

FROM 라이브러리이름.(period)데이터이름 ,(comma) 라이브러리이름.데이터이름 


3. Specifying A Join Condition

where salaams.empid=newsals.empid 

여러개의 테이블을 합칠때 꼭!!! WHERE구문을 통해 어떤 변수을 기준으로 매치(match)되어야하는지 지정해줘야하는데요. 만약 지정한 변수에서 그 안의 값들이 서로 일치하지 않을때, 그러니까 EmpID가 두 데이타 각각 다른 숫자들로 이뤄져있을때 결과값으로 0개의 행이 나오게 됩니다. 그리고 지정한 변수의 type도 꼭 같아야 합니다. 알아서 type을 바꿔서 불러오지 않아요. 


이렇게 하면 아래 그림처럼 아웃풋이 나오게 됩니다. 보니까 EmpID 숫자들이나 LastName이 정렬이 되어있지 않네요? 그냥 두개의 데이타가 합친거뿐이라서 그럽니다. 


4. Ordering Rows 

이제 행을 정렬해봅시다. 성 순으로 정렬을 해볼꺼예요. 이때 order by lastname; 이라고 하면 됩니다. 






#SAS 자격증, SAS advanced, SAS Advanced Programming, SAS Prep Guide 

반응형

+ Recent posts