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
'SAS > Base Programmer' 카테고리의 다른 글
[A00-211, Crambible] SAS Q88 - merge (0) | 2017.06.07 |
---|---|
[A00-211, Crambible] SAS Q87 - date (0) | 2017.06.07 |
[A00-211, Crambible] SAS Q85 - Excel workbook (0) | 2017.06.05 |
[A00-211, Crambible] SAS Q84 - _ERROR_ 42번 참고 (0) | 2017.06.04 |
[A00-211, Crambible] SAS Q83 - ods (0) | 2017.06.04 |