SAS Base, A00-211 Crambible 

SAS 베이스 자격증


QUESTION NO 89


The following program is submitted:
proc contents data=_all_;
run;


Which statement best describes the output from the submitted program?


A. The output contains only a list of the SAS data sets that are contained in the WORK library.

B. The output displays only the contents of the SAS data sets that are contained in the WORK library.

C. The output displays only the variables in the SAS data sets that are contained in the WORK library.

D. The output contains a list of the SAS data sets that are contained in the WORK library and displays the contents of those data sets.


proc contents data=library.데이터 이여야하는데요. 하지만 이때 _all_이라고 지정할 경우, defaust값으로 되어있는 work라이브러리에 있는 모든 데이터를 보여달라는 명령어입니다. 


Answer: D 


반응형

SAS Base, A00-211 Crambible 

SAS 베이스 자격증


QUESTION NO: 90

The following SAS program is submitted: 


proc format;
value score
1 - 50 = 'Fail'

51 - 100 = 'Pass';
run;

proc freq data=WORK.COURSES ; 

table Exam;
format Exam score.;
run;


The variable Exam has a value of 50.5.

How will the Exam variable value be displayed in the FREQ procedure output?

A. Fail
B. Pass
C. 50.5
D. . (missing numeric value)


proc format 즉, score의 format을 다음처럼 지정합니다. 1~50 값은 Fail로, 51~100은 Pass로 정의해줍니다. 


work라이브러리에 있는 courses라는 데이터의 proc freq라고 빈도를 조회하려고 하는데요. table Exam을 출력할때, 이때 score를 그 위에 지정한 포맷을 사용하려고 합니다. 이때 score. 뒤에 period 즉, . 이 들어가야합니다. 


그런데 Exam변수의 값을 보니 50.5 입니다. 이 수치는 포맷 적용이 안되겠죠. 왜냐하면 50.5는 Fail과  Pass 사이에 들어가게되고 이건 정의를 해준게 아니니깐요. 이렇게 만족하지 않을때는 그냥 값 그대로 나오게 됩니다. 


Answer: C 


반응형

SAS Base, A00-211 Crambible 

SAS 베이스 자격증


QUESTION NO: 88

Given the SAS data set WORK.EMP_NAME

Name EmpID
Jill 1864 

Jack 2121 

Joan 4698 

John 5463 


Given the SAS data set WORK.EMP_DEPT: 

EmpID Department

2121 Accounting
3567 Finance
4698 Marketing
5463 Accounting


The following program is submitted: 

data WORK.ALL;

merge WORK.EMP_NAME(in=Emp_N) WORK.EMP_DEPT(in=Emp_D);
by Empid;
if (Emp_N and not Emp_D) or (Emp_D and not Emp_N); 

run;


How many observations are in data set WORK.ALL after submitting the program?

A. 1 

B. 2 

C. 3 

D. 5


두개의 데이타, WORK.EMP_NAME, WORK.EMP_DEPT가 있는데요. 이 두개의 데이타를 합쳐서 (merge) ALL이란 새로운 데이타를 만들려고 합니다. 이 새롭게 만들어진 데이터의 observation 몇개가 되는 찾는 문제입니다. 


merge WORK.EMP_NAME(in=Emp_N) WORK.EMP_DEPT(in=Emp_D);
by Empid;

기준변수 Empid로 두개의 데이타를 합치는데요. WORK.EMP_NAME이 기준으로 같은 EmpID 같은 값으로 데이터가 들어가게 됩니다. 


Name EmpID Department 
Jill 1864      

Jack 2121     Accounting 

         3567    Finance 

Joan 4698     Marketing 

John 5463     Accounting 


위에서 초록색과 파란색으로 구분지었는데요. 이처럼 (in=Emp_N) & (in=Emp_D)여 역할은, 데이타가 합칠때 어떤 데이타가 어디에서 왔는지 구분하기 위해서 pdv에서만 생성됩니다. 아웃풋에서는 보여지지않고요. 



if (Emp_N and not Emp_D) or (Emp_D and not Emp_N); 

이 말은Emp_N  and not Emp_D  이 말은 Emp_N = 1 그리고 Emp_D = 0 을 뜻합니다. 

반대로 Emp_D and Emp_N 경우 Emp_D=1 그리고 Emp_N= 1을 뜻합니다. 


다시말해, merged된 데이터의 각 observation에서 기존 두 데이타에서 각각 observation이 missing value없이 잘 합쳐진게 아니라, 한쪽 데이타에는 있고, 한쪽 데이타에는 없는걸 찾으란 얘기입니다. 우에 표 보면, 첫번째는 Name, EmpID만 있고요. Department가 없죠. 세번째 경우, EmpID, Department는 있지만 Name은 없습니다. 얘네들을 말하게 됩니다.



Answer: B 


반응형

SAS Base, A00-211 Crambible 

SAS 베이스 자격증


QUESTION NO: 87

The following SAS program is submitted: 


data WORK.DATE_INFO; 

X="01Jan1960" D ;

run;


What variable X contains what value?


A. the numeric value 0
B. the character value "01Jan1960"
C. the date value 01011960
D. the code contains a syntax error and does not execute.


X변수에는 어떤 값이 들어가는지 찾는 문제인데요. 


X="01Jan1960" D ; 

변수 보니까 D 앞뒤에는 공백이 있습니다. 공백이 없어야 해요. 


공백이 없으면 값인 0이 나오는데요. 왜냐하면 1960년 1월 1일이 0이고 이 날을 기준으로 며칠의 차이가 있는건지 숫자로 결과값을 보여달라는 의미로 d가 들어간거기 때문입니다. 


X="02Jan1960"D ; 라고 했을때 1960년 1월 1일이 0이고 2일이면 차이가 1이 되겠죠. 따라서 X값은 1이 나오게 됩니다. 



Answer: D 


반응형

SAS Base, A00-211 Crambible 

SAS 베이스 자격증


QUESTION NO: 86


Given the data set WORK.EMPDATA: 


Employee_ 


Manager_ID      Job_Title           Department            ID (4개 변수) 

120101              Director            Sales Management    120261 

120102       Sales Manager       Sales Management    120101 

120103       Sales Manager II    Sales Management    120101 

120104 Administration Manager Administration           120101 

120105         Secretary I             Administration            120101


Which one of the following where statements would display observations with job titles containing the word 'Manager'?


A. wheresubstr(Job_Title,(length(Job_Title)-6))='Manager'; 

B. whereupcase(scan(Job_Title,-1,' '))='MANAGER';
C. whereJob_Title='% Manager ';
D. whereJob_Title like '%Manager%';




문제풀이 

A. wheresubstr(Job_Title,(length(Job_Title)-6))='Manager'; 


length(Job_Title) 우선 Job_Title의 length을 살펴보기 위해 가장 긴 단어를 보니 Administration Manager고요. 이 길이가 21인데요. Job_Title의 변수 길이는 일단 21은 되어야 되겠죠. 만약 이것보다 짧으면 글자가 짤리니까요. 


length(Job_Title)-6 21-6 = 15 

즉, wheresubstr(Job_Title, 15) 라고 되겠죠. 


substr는 Job_Title에서 15번째부터 값을 가져와라는 뜻입니다. 


예를들어 Director경우 15보다 작기때문에 15번째부터 값을 가져와야하니까 결국 공백을 가져오게되겠죠. Sales Manger경우 Sales Manager 역시 15번째부터 가져와야하니까 결국 공백을 가져오고요. 



B. whereupcase(scan(Job_Title,-1,' '))='MANAGER';

scan(Job_Title, -1, '') Job_Title이라는 변수를 공백으로 구분했을때 뒤에서 첫번째 덩어리르 가져오란 얘기입니다. 


예를들어 Director 경우, 변수를 공백을 구분하면 한덩어리가 되겠죠. 뒤에서 첫번째꺼를 결국 Director가 되겠습니다. Sales Manager경우 공백으로 구분하면 두 덩어리가 되었으니까 뒤에서 첫번째꺼 Manager가 되겠네요. Sales Manager II 경우 공백으로 구분하면 세 덩어리가 되니까 뒤에서 첫번째꺼 II가 되겠네요. 얘네는 Manger랑 비교할 수 없어서 답이 안되겠죠. 


upcase는 소문자를 찾아도 대문자로 바꿔주는 역할을 합니다. 



C&D는 %라는 와일드카드를 사용하고 있는데요. 어떤 문자의 앞 혹은 뒤에 어떤 문자가 와도 괜찮다라는걸 의미하기 위해 % 라는걸 사용합니다. 따라서 %Manager% 가 되겠죠. 


참고로 C, '% Manager ' : Manager앞에 아무거나 와도 상관 없고요. 대신 뒤에는 공백이 있어야합니다. 


Answer: D 


반응형

+ Recent posts