SAS Base, A00-211 Crambible, SAS 크램바이블

SAS 베이스 자격증, SAS 문제풀이 


QUESTION NO: 142

The following SAS program is submitted: 


data work.clients;
calls = 6;
do while (calls le 6);

calls + 1;
end;
run;

Which one of the following is the value of the variable CALLS in the output data set?

A. 4 

B. 5 

C. 6 

D. 7



work라이브러리에 client 데이타를 만들려고 하는데요. 이때 call이라는 변수에 6을 넣었습니다. 그리고 do 반복문을 실행하는데 이때 call이라는 변수가 6보다 less than equal 6보다 작을때까지 반복하려고 합니다. 6에서 반복문이 시작되어서 calls+1 = 7이 되었고요. 다시 do 반복문을 실행하려고 하니 이미 조건 7 이 less than equal 이 만족하지 않아서 do 반복문이 실행되지 않고 그대로 끝나게 됩니다. 





같은 결과값을 얻기 위해 DO WHILE이 아닌 DO UNTIL을 쓸 경우 어떤 값을 바꾸면 될까요? 


DO WHILE / DO UNTIL 이랑 비교해봅시다. 

참고: http://www2.sas.com/proceedings/forum2007/067-2007.pdf 


DO WHILE : The while test is evaluated at the top of the loop. 

DO UNTIL: The until test is evaluated at the bottom of the loop.
 

while은 loop반복문 위에서 조건값을 확인하고, 

until은 loop 반복문 아래에서 조건값을 확인해야합니다. 


그래서 while경우, call의 값 6으로 할당된걸로 시작해서 반복문에 들어와 7이 되었고 이 값이 do while (call le 6)에서 less than or equal 6 에서 조건이 만족되지 않아 7로 결과값이 나왔죠. 


똑같이 7의 결과값을 얻으려면, until의 경우, do until (call ge 6) 이라고 설정합니다. 이때, ge는 greater or equal to라는 뜻이고요. call값이 6으로 할당된걸로 시작해서 반복문에 들어와 7이 되었습니다. 7의 값을 다시 do 반복문 처음으로 올라가 이 값이 조건되는지를 확인하는게 아니라 조건문이 do loop 안에 들어온 값이 만족될때를 설정하는거라 LE이 아니라 GE로 바꿔주면 됩니다.   





Answer: D 


반응형

+ Recent posts