SAS Certification Prep Guide,

Advanced Programming for SAS 9 fourth edition

PART 1. SQL Processing with SAS 


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

먼저, SQL은 Structured Query Language 의 약어고요. 데이터베이스에서 테이블을 검색하거나, 결합, 수정 이런 작업에서 쓰이는 언어입니다. SAS의 PROC SQL은 이 SQL의 SAS 버전입니다. SQL의 역할과 마찬가지로, 기존의 데이터를 PROC SQL을 이용해서 새로운 데이터 테이블을 만드는게 목적이고요. 그러면 데이터를 어떤 변수를 기준으로 할지 어떻게 데이타를 합칠지 이런 내용을 다루겠죠.


SQL과 SAS 는 같은 언어를 쓰는건 아니고요. 

데이터 파일을 SAS는 SAS data file, SQL table이라고 부르고요. 각 기록? 그러니까 관측치를 SAS에서는 observation라 하고, SQL은  row 라고 합니다. 그리고 변수를 SAS에서는 variable SQL은 column 으로 부릅니다. 같은걸 표현하는 언어가 살짝 다를뿐이예요. 



PROC SQL 일반 형식 



참고로 PROC SQL 프로시져는 다른 SAS 구문과 달리 RUN; 명령어로 끝내지 않습니다. RUN;이라고 마지막에 넣는다고 해도 log file에서는 NOTE: PROC SQL statements are executed immediately; The RUN statement has no effect. 라고 알려주지만 에러나진 않습니다. 다만 PROC SQL 프로시져를 마칠대는 QUIT;이라는 명령어를 씁니다. QUIT이라는 명령어를 안쓰면 Note: As a precaution, SAS Enterprise Guide automatically adds a QUIT statement to your code when you submit it to SAS. However, you should get in the habit of adding the QUIT statement to your code. 이런식으로 메시지가 뜹니다.   




책에서는 다음과 같은 예를 들었는데요. 

SELECT 문구를 써서 empid, jobcode, salary라는 변수를 불러왔습니다. 이렇게 SELECT 다음에는 하나 이상의 변수를 , 를 구분으로 불러옵니다. SELECT구문에는 이처럼 기존에 있는 변수를 불러올 수 있거나, 아니면 새로운 변수를 지정할 수 있어요. 그 다음 문구 salary * .06 as bonus가 그 예입니다. as를 이용해서 salary * .06 이렇게 계산한 값을 bonus로 지칭한다~ 라는 뜻이예요. 그래서 여기서는 bonus가 새로운 변수 있니다. 


그런다음 FROM을 써서 어떤 테이블을 사용할껀지 불러온건데요. 이때 라이브러리이름.테이블이름 이렇게 지정해줍니다. 여기에서는 sasuser라는 영구 라이브러리에 payrollmaster라는 테이블을 불러왔습니다. 


그런다음 WHERE 조건문으로 테이블의 모든 observations (row)를 다 불러오진 않고 salary변수 중에 32000 이하의 값 (observations / rows) 만 불러옵니다.  


그리고 이 observations들은 ORDER BY라는 구문으로 정렬이 되어집니다. 이때 ORDER BY 변수들이 나오고 변수가 여러개 나오면 변수사이에 , (콤마)를 넣으면 됩니다. 이때 default, 즉 기본값으로는 오름차순으로 정렬됩니다. 만약 내림차순으로 하고싶으면 ORDER BY jobcode desc; 적으면 됩니다. 꼭 변수 이름이 아니더라도 position number를 지정해줘도 됩니다. 예를들어 order by 2; 라고 하면 처음 select empid, jobcode, salary, 에서 두번째가 jobcode가 되지요. 그래서 by 2 라고 하면 jobcode를 뜻하게 됩니다. 

반응형

SAS Base, A00-211 Crambible 

SAS 베이스 자격증


QUESTION NO: 85


The Excel workbook REGIONS.XLS contains the following four worksheets: 

EAST WEST NORTH SOUTH 


The following program is submitted: 

libname MYXLS 'regions.xls';


Which PROC PRINT step correctly displays the NORTH worksheet?


A. proc print data=MYXLS.NORTH; run;
B. proc print data=MYXLS.NORTH$; run;

C. proc print data=MYXLS.'NORTH'e; run; 

D. proc print data=MYXLS.'NORTH$'n; run;


엑셀파일에 4가지 워크시트가 있습니다. 파일을 MYXLS로 라이브러리를 설정했는데요. 엑셀 파일 안에 있는 워크시트들이 SAS 데이타로 인식하게 됩니다. 


이때 NORTH 워크시트를 불러오려면 어떤 명령어를 적어야하는지 묻고 있습니다. 

문법이라 외우세요~ 


proc print data=MYXLS.'NORTH$'n; run;



Answer: D 


반응형

SAS Base, A00-211 Crambible 

SAS 베이스 자격증


QUESTION NO: 84


Which statement describes a characteristic of the SAS automatic variable _ERROR_?


A. The _ERROR_ variable maintains a count of the number of data errors in a DATA step.


B. The _ERROR_ variable is added to the program data vector and becomes part of the data set being created.

C. The _ERROR_ variable can be used in expressions in the DATA step.


D. The _ERROR_ variable contains the number of the observation that caused the data error.



시스템적인 언어, _ERROR_에 대한 설명 중 맞는거를 찾는건데요. 데이터 스텝에서 에러가 발생하면 1을 할당하고, 에러없이 잘 실행되면 0을 갖는 자동 변수인데요. 물론 아웃풋에는 보여지지 않습니다. (becomes part of the data set being created. 따라서 여기가 틀렸습니다) 


같은문제 42번 참고하세요. 


Answer: C 


반응형

SAS Base, A00-211 Crambible 

SAS 베이스 자격증 


QUESTION NO: 83


Which of the following choices is an unacceptable ODS destination for producing output that can be viewed in Microsoft Excel?


A. MSOFFICE2K 

B. EXCELXP
C. CSVALL
D. WINXP



A, B, C는 모두 엑셀에서 아웃풋을 볼 수 있습니다.  WINXP는 운영체제를 말합니다. 


Answer: D 


반응형

SAS Base, A00-211 Crambible 

SAS 베이스 자격증 


QUESTION NO: 82

Given the following data step: 


data WORK.GEO;
infile datalines;
input City $20.;

if City='Tulsa' then State='OK'; 

Region='Central';
if City='Los Angeles' then State='CA' Region='Western'; 

datalines;

Tulsa
Los Angeles
Bangor;

run;


After data step execution, what will data set WORK.GEO contain?


A. City State Region

 Tulsa OK Western 

 Los Angeles CA

 Western Bangor Western 


B. City State Region

Tulsa OK Western 

Los Angeles CA 

Western Bangor 


C. City State Region

Tulsa OK Central

 Los Angeles CA 

Western Bangor Western 


D. City State Region

Tulsa OK Central 

Los CA Western

Bangor


datalines;

Tulsa
Los Angeles
Bangor;


GEO라는 데이터를 만들려고 하는데요. infile을 통해 아래 정의된 datalines를 불러오게 됩니다. 

이때 input을 이용해서 City라는 변수가 만들어집니다. 


input을 만났으니 첫번째 Tulsa를 읽어옵니다. 

City    State    Region 

Tulsa  OK       Central Western


- If구문에서 City가 Tulsa가 되면 State는 OK가 됩니다.

- Region에 Central을 넣으라고 했고요. 

- 다시 If 구문에서 Los Angeles라고 되어있으니 해당이되지 않아 건너띄구

- 다시 Region에서 Western이라고 적으라고 하네요. 그래서 Central이 없어지고 Western이라고 적게 됩니다. 


두번째 Los Angeles를 읽어옵니다. 

City    State    Region 

Tulsa  OK       Western

Los Angeles  CA   Central Western

- if 구문에서 City가 Tulsa가 아니라서 여긴 건너뛰고요

- Region에서 Central을 넣고요. 

- if구문에서 City가 Los Angeles니까 State에는 CA라고 넣습니다. 

- 다시 region에는 Western을 넣으라고 하네요. 



세번째 Bangor를 읽어옵니다. 

City    State    Region 

Tulsa  OK       Western

Los Angeles  CA  Western

Bangor            Central Western 

- if 구문에서 City가 Tulsa가 아니라서 여긴 건너뛰고요

- Region에서 Central을 넣고요. 

- if구문에서 City가 Los Angeles니까 또 건너뛰고요. 

- 다시 region에는 Western을 넣으라고 하네요.


따라서  

City              State       Region 

Tulsa             OK        Western

Los Angeles  CA       Western

Bangor                        Western 



Answer: A 


반응형

+ Recent posts