본문 바로가기
SAS/BASE 강좌

1. SAS BASE 풀이와 함께하는 덤프 1 to 10

by 지따 2013. 12. 13.

 

 

 

SAS BASE DUMP 풀이

  

SAS BASE 공부를 하면서 풀이가 제대로 나온 DUMP가 없어서 많이 아쉬웠습니다.

그래서 구글링하던 중 좋은 DUMP 문제가 있어서 함께 공부해보고 싶고, 조금이나마 SAS BASE 공부하는데 도움이 되었으면 하는 마음에 포스팅을 했습니다.

문제를 푼 다음에 풀이를 꼭! 보시는 것을 추천드립니다.

 

 

 

 

1.

 

Do 반복문과 output에 대한 문제입니다.

먼저 year이 5번 반복되며 한번의 실행시 month가 12번 반복됩니다. 이 반복마다 output이 있어서 변수가 출력되는 문장이라는 것을 알 수 있습니다.

 

따라서 관측치는 60개가 생성됩니다.

※output문이 없다면 관측치는 계속 덮어쓰는 식이 되므로 1개가 됩니다.

 

 

정답 : D

 

 

2.

 

이 문제는 raw data를 SAS data set으로 작성하는 input문제입니다.

보기를 보면 dlm옵션에 대해 묻는 문제라는 것을 바로 알 수 있습니다.

여기서 잠깐! dlm옵션에 대해서 알아보고 갈까요?

 

■ dlm 옵션

원본데이터에서 공백이 아니라 다른 구분자가 사용되었을 때 다른 구분자를 인식하여 데이터를 읽기 위해 사용되는 옵션입니다.

 

- 사용위치는 infile문에 사용

- 형태 : ex) infile 'file specification' dlm='구분자';

- 구분자는 200자 까지의 구분자로 구성된 목록을 지정할 수 있다.

- 데이터값에 사용된 문자와 같은 구분자를 쓰면 안된다.

 

 

정답 : C

 

 

 

 

3.

 

input과 if - else의 혼합된 문제이지만 너무 쉬워서 이걸 문제라고 낸거야 라는 말이 절로 나오는 문제입니다.

한 번의 반복 때 한 번을 읽게 됩니다.

Do 문장과 헷갈리도록 의도한 문제라고 생각됩니다.

 

 

답 : A

 

 

4.

 

네. 딱 보이듯이 여러분과 제가 싫어하는 배열에 대한 개념을 묻는 문제입니다.

이 문제는 단순히 개념만 묻기 때문에 쉽게 풀수 있습니다.

배열은 Data단계에서만 유효하고, Data set의 일부가 될 수 없죠.

 

※ 이 외에도 Label, Format, Drop, Length 문장에서 쓸 수 없습니다.

 

 

정답 : B

 

 

5.

 

문제 그대로 자동변수 인 _ERROR_ 변수에 대해 개념을 묻고 있습니다.

모두 다 풀이하도록 할께요.

A. _ERROR_ 변수는 TRUE와 FALSE 값을 가지고 있냐? 아니. 0과 1을 갖고 있습니다.

B. _ERROR_ 변수는 오류의 수를 나타내냐? 위에 언급한바와 같이 0과 1만 나타냅니다.

C. 자동변수 또한 계산을 할 수 있습니다. 

D. 오류를 야기한 관측치의 수를 나타내는 것이 아니라 오류가 발생할 때 1, 아닐때 0입니다.

 

 

정답 : C  

 

 

6.

 

 

 

input 포인터에 대한 문제입니다.

보기가 이상해서 설명을 드리자면 daisy까지는 type이고 나머지 뒷부분은 color입니다.

처음 input type $ 1-5 부분까지는 type변수가 1-5까지 읽어서 입력되었습니다. 입력이 완료된 상태에서 포인터는 6번째 자리에 있고, 이 상태에서 +1을 하게 된다면 7번째 자리에서 입력이 사작됩니다. 따라서 color 변수는 ellow가 입력됩니다.

만약,

input type $ 1-5 color $; <--로 수정하게 된다면 type은 daisy, color은 yellow가 되는 것 입니다.

 

 

정답 : B

 

 

7.

keep에 대한 형태의 문제입니다.

잠깐 keep과 drop에 대해 알아보고 갈께요.

 

■ keep과 drop 데이터세트 옵션

 

데이터세트에서 불필요한 필드를 읽고, 버리거나 유지할 필요가 있다. 이럴때 사용하는 것이 drop과 keep 옵션이다.

 

Q : 버릴꺼 하나만 있으면 되는거 아니야?

A : 아니야!, 만약 변수가 10개가 있는데 그 중에 2개의 변수만 필요해.

     그럼 drop에 변수를 8개나 써야하지!

  하지만 keep을 쓰면 변수를 2개만 쓰면되잖아 ㅡㅡ^

 

- 형태 :  (drop=variable(s)); ex) data test.test1(drop=testdata testdata2);

 

■ keep과 drop 문장

 

keep과 drop 데이터세트 옵션과 유사하지만 다음과 같은 점에서 다르다.

- PROC(프로시저) 에서는 사용할 수 없다.

- 해당 DATA 문장 안에서 모든 출력 데이터세트에 영향을 준다.

- 형태 : drop variable(s); ex) drop testdata testdata2

 

데이터세트 옵션이 아닌 keep과 drop문장에서 오류가 발생했습니다.

따라서, '='을 빼야 syntax error가 없어지겠죠?

 

 

정답 : A

 

 

 

 

8.

 

IF함수를 활용하여 각기 다른 data set에 data를 분리하여 입력하는 것에 대한 문제입니다.

처음부터 읽어가면서 설명드릴께요.

data hware inter cheap;

// data문장에서 hware, inter 그리고 cheap라는 data set을 형성하게 됩니다.

set prices(keep = producttype price);

// prices data set을 불러오고 producttype과 price 변수만 유지합니다.

if producttype='HARDWARE' then output hware;

// producttype이 HARDWARE이면 hware data set에 변수를 출력합니다.

else if producttype='NETWORK' then output inter;

// 아니라면 producttype이 NETWORK이면 inter data set에 변수를 출력합니다.

if price le 5.00;

// 이 문장은 실행 조건이 달려 있지 않기 때문에 없어도 되는 문장입니다.

    여기서 낚이시면 안되죠!

run;

// 달리자! ㅎ_ㅎ...

 

HARDWARE가 4개의 관측치가 있으므로, HWARE data set에 4개의 관측치가 저장되어서, 정답은 4입니다.

 

 

정답 : D

 

 

 

9.

 

month와 weekday에 대한 문제입니다.

문제 자체는 아주 쉽기 때문에 날짜 함수에 대해 알아보고 가는 시간을 갖죠!

 

■ 날짜 함수

 

함수 종류

형태

결과치

MDY

test=mdy(month,day,year);

SAS 날짜

TODAY

test=today();

시스템의 오늘 날짜

DATE

test=date();

시스템의 오늘 날짜

TIME

test=time();

시스템의 현재 시간

DAY

testday=day(date);

일 (1 ~ 31)

QTR

testqtr=qtr(date);

분기 (1 ~ 4)

WEEKDAY

testweekday=weekday(date);

요일 (1 ~ 7) ※ 일요일부터 토요일까지 (1 ~ 7 )

MONTH

testmonth=month(date);

월 (1 ~ 12)

YEAR

testyear=year(date);

4자리 연도

INTCK

test=intck('day',d1,d2);

                 ↑ 사용되는 상수 week, month, qtr, year

d1~d2까지의 일 수(주 수, 월 수, 분기 수, 연 수)

INTNX

test=intnx('상수', start, 증분, (구간));

start로 부터 상수를 증분시킨 값

 

 4월이므로 mdate는 4, 금요일이므로 ddate는 6입니다.

 

 

정답 : B

 

 

10.

 

 footnote에 관한 문제입니다.

상위 footnote가 다시 쓰인다면 하위 footnote는 초기화가 된다는 것을 아는지에 대해 묻는 문제!

footnote 1이 최상위이고 숫자가 증가할 수록 하위 footnote가 됩니다.

따라서, proc print에서 footnote 2가 다시 정의되므로, 하위 footnote인 3, 4는 초기화 됩니다.

 

 

정답 : B

 

댓글