Chapter 2. Performing Advanced Queries Using PROC SQL


SELECT statement의 일반적인 형식은 다음과 같습니다.

SELECT 명령어를 통해 결과물에 들어갈 열(column)을 지정해주고요. 

FROM을 통해 어떤 데이터 테이블을 사용할지, 

WHERE을 통해서 조건문을 설정하고요

GROUP BY을 통해 특정 열을 그룹지을 수 있습니다. 

HAVING은 나중에 다루도록 합니다. 



1. Displaying ALL Columns 

SELECT문구를 통해 결과물에서 보여줄 column만 적어준다고 했는데요. 데이터테이블에 있는 모든 열을 보고 싶은 경우 * (asterisk, 별표)를 넣으면 됩니다. default값으로 모든 행의 값이 출력하게 됩니다


PROC SQL; 

select * 

from sasuser.staffchanges; 


위에 내용은 sasuser라이브러리에 있는 staffchagnes라는 테이블의 모든 열을 보여달라는 명령어겠죠. 

참고로 이렇게 SELECT * 를 사용할 경우, 옵션으로 FEEDBACK을 사용할 수 있습니다. 


PROC SQL FEEDBACK

select * 

from sasuser.staffchanges; 


그러면 SAS 로그파일에서 다음과 같은 내용이 뜨게 됩니다. 디버깅할때 용이하겠죠. 



2. Limiting the Number of Rows Displayed 

만약 특정 숫자의 행만 보고싶을 경우 어떻게 하면 될까요. 이때, outobs를 설정하면 됩니다. 


PROC SCQ OUTOBS = n; 


아래 명령어를 보면, 10개의 행을 출력하는데,  sasuer라이브러리에 있는 flightschedule테이블에 flightnumber와 date변수만 나오게 하라라고 되어있습니다. 하지만 이렇게 행의 개수를 제한하는 옵션을 사용할 경우, SAS 로그 파일에서 warning 메시지가 뜨게 됩니다. (Statement terminated early due to OUTOBS=10 option.) 


3. Eliminating Duplicate Row from Output 

테이블에서 어떤 행들이 중복되어 값이 들어가있을때, 중복된건 빼고 싶을 경우 SELECT구문안에 DISTINCT를 사용하면 됩니다. 이때 DISTICT는 모든 열에 해당하거나 아니면 특정 열에 해당할 수 있어요. 


아래 예제를 보면 sasuser라이브러리에 있는 internationalflights데이타를 불러와서 flightnumber와 destination의 열에서 12개의 행을 가져오라고 했는데요. 보면 182 YYZ가 두번 겹쳐 있네요? 이렇게 Flightnumber가 중복되어있는게 여러개 보입니다.  Flightnumber에서 중복된 값을 제거하도록 합시다. 



아래 명령어에서 주목해야할 outbos= 옵션이 없어졌다는것과,  SELECT DISTINCT flightnumber, destination 즉 select 구문에서 disticnt가 들어가있다는것!! 이때 sort를 order by 1 즉, 첫번째 열인 Flightnumber를 default값인 오름차순으로 정렬되어있습니다. 







# SAS 자격증, SAS Advanced programming, SAS Prep Guide 

반응형

+ Recent posts