SAS Base, A00-211 Crambible 

SAS 베이스 자격증 


QUESTION NO: 66


The following SAS program is submitted: 


<insert ODS statement here>
proc means data = sasuser.shoes;
where product in ('Sandal' , 'Slipper' , 'Boot'); 

run;

<insert ODS statement here>

Which ODS statements complete the program and send the report to an HTML file?


A. ods html = 'sales.html'; ods html close; 

B. ods file = 'sales.html'; ods file close;

C. ods file html = 'sales.html'; ods file close; 

D. ods html file = 'sales.html'; ods html close;




ODS는 Output Delivery Service의 약자로, 결과물을 어떤 형식으로 보낼지에 대한 설정을 말합니다. 그래서 문법이라서 외우면 됩니다. ods html file = 'sales.html'; ods html close; 마지막에 close로 끝난다라는게 다른 덤프문제에 나와있었죠.


Answer: D 



반응형

SAS Base, A00-211 Crambible 

SAS 베이스 자격증 


QUESTION NO: 65


The following SAS program is submitted: data combine;

prefix='505';
middle='6465 ';

end='09090';
<insert statement here>; 

run;


Which statement successfully completes the program so that TOTAL has a value of 505-6465- 09090?


A. total = cat('-', prefix, middle, end);
B. total =catx('-', prefix, middle, end);
C. total = prefix !!'-'!! middle ''!!'-'!! end; 

D. total = prefix!!'-'!! left(middle)!!'-'!! end;


505-6465-09090 결과값을 얻기 위해 어떤 명령어를 넣어줘야하는지에 대한 질문입니다. 보니까 - (hyper)를 기준으로 값이 연결되어있고요, 참고로 middle에는 빈 공간도 있는데 결과물은 빈공간이 없어졌네요. 이렇게 문자열을  합치는데 사용되는 것들은 다음과 같습니다. cat, catx, !! 


prefix='505';
middle='6465 ';  <- 빈 공간이 있는거 참고하세요. 

end='09090';



A. total = cat('-', prefix, middle, end);

    cat은 그냥 그대로 연결합니다. 그래서 -5056465 09090 이 결과값으로 나오게 됩니다. 빈 공간이 없어지지 않고 그대로 다 연결되었어요.  


B. total =catx('-', prefix, middle, end);
    catx는 공백을 없애주고 prefix, middle, end를 -로 연결됩니다. '-'는 연결을 해주라는 말입니다. 따라서 결과가 505-6465-09090 됩니다. 


C. total = prefix !!'-'!! middle ''!!'-'!! end; 

    !! 는 합쳐주는 기능을 하고 있습니다. cat과 같은 기능을 가지고 있는데요. 에러가 납니다. !! 가 빠져있어서 그렇습니다. C는 잘못되어있어서 D를 보면~ 


D. total = prefix!!'-'!! left(middle)!!'-'!! end;

   505-6465 -09090 결과가 되는데요. B와 차이점은 D에 공백이 있습니다. !! 합치게될땐 공백을 없애는 기능이 없습니다. 





Answer: B 


반응형

SAS Base, A00-211 Crambible 

SAS 베이스 자격증 


QUESTION NO: 64


After a SAS program is submitted, the following is written to the SAS log: 


105 data january;
106 set allmonths(keep = product month num_sold cost);
107 if month = 'Jan' then output january;

108 sales = cost * num_sold; 

109 keep = product sales;

ERROR 22-322: Syntax error, expecting one of the following:

!, !!, &, *,**, +, -,/, <,< =, <>, =, >, ><, >=,
AND, EQ, GE, GT, IN, LE, LT, MAX, MIN, NE, NG, NL, NOTIN, OR,^=,|,II,

110 run;


What changes should be made to the KEEP statement to correct the errors in the LOG?


A. keep product sales; 

B. keep product, sales; 

C. keep = product, sales;

D. keep = (product sales);



SAS log 파일을 보여주고 있고요. 105번째 줄부터 110번째 줄까지 나와있네요. 이 에러는 109번째 줄에서 생기게 되었겠네요. 109번째를 보니 keep이라는 명령어로 product와 sales라는 변수를 유지시켜주려고 했네요. 


data step에서의 keep 문구는 = 이 필요없이 keep 변수; 이렇게 적어주면 됩니다. 참고로, set을 이용해서 set allmonths(keep = product month num_sold cost); 처럼 allmonths데이타안에서의 product month num_sold cost변수를 유지시키라고 할땐 = 가 필요합니다. 


Answer: A 


반응형

SAS Base, A00-211 Crambible 

SAS 베이스 자격증 


QUESTION NO: 63


Given the SAS data set ONE: 

ONE

X Y Z 

1 A 27

1 A 33

1 B 45

2 A 52

2 B 69

3 B 70

4 A 82

4 C 91 


The following SAS program is submitted: 


data work.two;
  set work.one;
  by x y;

  if first.y;
run;


proc print data = two noobs; 

run;


Which report is produced? 


A. X Y Z 1 A 27 1 B 45 2 A 52 2 B 69 3 B 70 4 A 82 4 C 91

B. X Y Z 1 A 33 1 B 45 2 A 52 2 B 69 3 B 70 4 A 82 4 C 91

C. X Y Z 1 B 45 2 A 52 2 B 69 3 B 70 4 A 82 4 C 91

D. The PRINT procedure tails because the data set TWO is not created in the DATA step.


ONE 데이타를 불러와서 TWO라는 데이터를 만들려고 합니다. 이때 by로 X, Y라는 변수를 지정했습니다. 이렇게 set & by를 이용해서 변수를 정하면, pdv상에 first / last 값이 생기게 됩니다. 그러니까 X변수의 첫번째 값, 마지막 값, Y변수의 첫번째 값, 마지막 값이 따로 생기는데요.


그러니까 first X 에서 값이 X라는 변수의 observation 1이라는 값이 첫번째이면 1로, 첫번째가 아니면 0으로 표시됩니다. 그러니까 일종의 표시라고 생각하면 되어요. obervation 2라는 값이 첫번째로 나오는애를 1로, 아니면 0으로 표시하는겁니다. 


그러면 last X는 first X이니까 아래 표와 같고요. 


이때 First Y를 살펴봅시다. X를 고려한 후에 Y를 생각해야하야합니다. 빨간색 X값이 1인 상태인 경우, Y를 봤을때 A가 처음 나왔으니 1로 적고, 또 A가 나왔으니 0, 새로 B가 나왔으니까 1로 적어둡니다. 이번에 X값이 2인 상태인 경우, Y값을 봤을때 A가 처음 나와서 1로 적고, 그 다음 B가 새로 나왔으니 또 1로 적고,...이렇게 진행하면 다음과 같이 됩니다. 

X

first X 

last X

First Y 

 1

 A

 27

 1

 0

 1

 1

 A

 33

 0

 0

 0

 1

 B

 45

 0

 1

 1

 2

 A

 52

 1

 0

 1

 2

 B

 69

 0

 1

 1

 3

 B

 70

 1

 1

 1

 4

 A

 82

 1

 0

 1

 4

 C

 91

 0

 1

 1


회색부분은 물론 결과물에서 보여지지는 않습니다. 


이때 if First.Y 이렇게 선택하고 해당에 대해 결과물을 프린트하라는 명령어입니다. if First.Y 라는 의미는 first.Y = 1 이라는 얘기입니다. 기울여서 쓴 값을 제외하고 나머지 다 1이기때문에 얘네들이 결과값으로 나오게 되어요.   


Answer: A 



반응형

SAS Base, A00-211 Crambible 

SAS 베이스 자격증 


QUESTION NO: 62


The following SAS program is submitted: 


data numrecords;
infile 'file specification';
input@1 patient $15.


relative $ 16-26@;
if relative = 'children' then input @54 diagnosis $15. @; 

else if relative = 'parents' then input @28 doctor $15.
clinic $ 44-53
@54 diagnosis $15. @;
input age;
run;


How many raw data records are read during each iteration of the DATA step execution?


A. 1 

B. 2 

C. 3 

D. 4


data step이 실행될때 raw 데이타가 몇번 읽혀지는지 묻는 문제입니다. 덤프에서 답이 B이지만, A가 답이라고 합니다. 


infile로 데이타를 불러와서 numrecords라는 새로운 데이타를 만들려고 합니다. input구문을 이용해서 patients라는 변수에다가 첫번째 값을 넣어주고, relative나는 변수에 16에서 26 자리를 넣어주고요. 


if 구문을 이용해서 만약 relative가 children일 경우, diagnosis라는 변수를 넣고, relative가 parent인 경우 doctor와 clinic변수를 넣습니다. 그리고 또 @ 이용해서 계속 데이타를 읽어서 age를 넣습니다. 


즉, @ 기능을 이용해서 데이터를 한번 읽어와서 이걸 여러 변수로 나눠 넣는다고 보면 되기때문에 데이타가 한번 읽혀진다고 합니다. 



Answer:  A


반응형

+ Recent posts