일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 우분투
- 지리지
- R
- 풍백
- 유주
- 후한서
- t test
- 창평
- categorical variable
- ANOVA
- linear regression
- 기자
- 선형회귀분석
- 기자조선
- 단군
- post hoc test
- 통계학
- Histogram
- 히스토그램
- 낙랑군
- 태그를 입력해 주세요.
- 통계
- 패수
- 고구려
- repeated measures ANOVA
- 한서지리지
- 신라
- 독사방여기요
- 한서
- spss
- Today
- Total
獨斷論
SAS 문법 - 6: IF ~ THEN ~ 활용하기 본문
1. 기본문법
IF (조건식) THEN (조건식이 참일때 수행);
ELSE (조건식이 거짓일때 수행);
예를들어 아래와 같이 AVG값이 65보다 크면 STATUS에 FAILED를 넣고 그렇지 않으면 STATUS에 PASSED를 넣도록 할수 있다.
data grades;
input name $ 1-15 e1 e2 e3 e4 p1 f1;
avg = mean(e1, e2, e3, e4);
if avg < 65 then status = 'Failed';
else status = 'Passed';
datalines;
Alexander Smith 78 82 86 69 97 80
John Simon 88 72 86 50 100 85
Patricia Jones 98 92 92 99 99 93
Jack Benedict 54 63 71 49 82 69
Rene Porter 100 62 88 74 98 92
;
run;
proc print data = grades;
var name e1 e2 e3 e4 avg status;
run;
2. 비교 연산자
비교 | SAS 문법 |
다른 문법 |
작다 | < | LT |
크다 | > | GT |
작거나 같다 | <= | LE |
크거나 같다 | >= | GE |
같다 | = | EQ |
같지 않다 | ^= | NE |
in 연산자 뒤에오는 것들중에 있으면 | in | IN |
위에 if~then~else에 사용할수 있는 연산자들을 적었다. A < B 또는 A LT B라고 쓰면 A가 B보다 작을때 true가 되고 클때 false가 된다. in이라는 연산자는 아래 예제를 보자.
data grades;
input name $ 1-15 e1 e2 e3 e4 p1 f1;
if p1 in (98, 99, 100) then project = 'Excellent';
datalines;
Alexander Smith 78 82 86 69 97 80
John Simon 88 72 86 50 100 85
Patricia Jones 98 92 92 99 99 93
Jack Benedict 54 63 71 49 82 69
Rene Porter 100 62 88 74 98 92
;
run;
proc print data=grades;
var name p1 project;
run;
if p1 in (98, 99, 100) then project = 'Excellent'는 p1의 값이 98, 99, 100중에 하나라도 같은 값이 존재하면 project에 Excellent를 넣으라는 뜻이 된다. p1이 98.1이라면 if~ 조건부는 거짓이 된다.
3. 논리 연산자
논리 | SAS 문법 | 다른 문법 |
are both conditions true? | & | AND |
is either condition true? | | | OR |
reverse the logic of a comparison | ^ or ~ | NOT |
간단한 예로써
IF (p1 GT 90) AND (f1 GT 90) THEN performance = 'excellent';
라고 하면 p1이 90보다 크고 f1이 90보다 크다면 performance에 excellent를 대입하라는 뜻이 된다.
OR로 바꾼다면
IF (p1 GT 90) OR (f1 GT 90) THEN performance = 'very good';
라고 하면 p1이 90보다 크거나 f1이 90보다 크다면 performance에 excellent를 대입하라는 뜻이 된다.
위 연산자를 이용하여 학생의 성적에 따라 A~F를 넣어보자.
data grades;
input name $ 1-15 e1 e2 e3 e4 p1 f1;
avg = (e1 + e2 + e3 + e4) / 4;
if (avg EQ .) then overall = 'incomplete';
else if (avg >= 90) then overall = 'A';
else if (avg >= 80) and (avg < 90) then overall = 'B';
else if (avg >= 70) and (avg < 80) then overall = 'C';
else if (avg >= 60) and (avg < 70) then overall = 'D';
else if (avg < 60) then overall = 'F';
datalines;
Alexander Smith 78 82 86 69 97 80
John Simon 88 72 86 . 100 85
Patricia Jones 98 92 92 99 99 93
Jack Benedict 54 63 71 49 82 69
Rene Porter 100 62 88 74 98 92
;
run;
proc print data=grades;
var name avg overall;
run;
overall이라는 변수에 avg의 범위에 따라서 A, B, C, D, F를 할당하였다. 결측값을 해결하기 위하여 mean함수를 사용하지 않고 직접 평균을 구하였고 결측값인 경우 overall에 incomplete를 할당하도록 하였다.
4. 여러문장을 실행하는 if~then~else
지금까지는 if 조건이 참일때 하나의 문장만 실행하였다. if 조건이 참일때 여러가지 문장을 실행하려면 then 뒤에 do ~ do를 추가하여야만 한다. 예를들어 e4에 결측값이 있을때 그 값에 0을 넣고 status에 fail을 넣으려면 아래와 같이 한다.
data grades;
input name $ 1-15 e1 e2 e3 e4 p1 f1;
if (e4 EQ .) then do;
e4 = 0;
status = 'failed';
end;
datalines;
Alexander Smith 78 82 86 69 97 80
John Simon 88 72 86 . 100 85
Patricia Jones 98 92 92 99 99 93
Jack Benedict 54 63 71 49 82 69
Rene Porter 100 62 88 74 98 92
;
run;
proc print data=grades;
var name e1 e2 e3 e4 p1 f1 status;
run;