Q_05_01. SAS에서 제공하는 함수
SAS에는 다른 소프트웨어처럼 여러 가지 기능을 가진 내장 함수를 갖고 있어서 이를 알아두면 상당히 편리하게 사용할 수 있습니다. 이를 모르면 데이터 처리가 쉽지 않고, 때로는 함수에 해당하는 프로그램을 직접 만들어야 하는 경우도 있게 됩니다. 이런 기능을 모르면 SAS로는 해결할 수 없는 경우가 많으며 “SAS로는 해결할 수 없다.”라고 생각하게 됩니다.
1. 연산(Arithematic) 기능 함수
연산을 담당하는 함수로 다음과 같은 것들이 있습니다.
함수 이름기능예시
ABS(argument) | 절대값을 계산합니다 | ABS(-1) => 1 |
MAX(argument, argument, ...) | 최대값을 구합니다 | MAX(1, 2, 3, 4, 5) => 5 |
MIN(argument, argument, ...) | 최소값을 구합니다 | |
MOD(arg1, arg2) | 나눗셈에서의 나머지를 계산합니다 | MOD(7, 3) => 1 |
SIGN(argument) | 변수의 부호 또는 0을 반환합니다 | SIGN(-1) => -1 |
SQRT(argument) | 제곱근을 계산합니다 | SQRT(4) => 2 |
ABS : 절대값
DIM : ARRAY 문의 원소들의 수
HBOUND : ARRAY에 사용된 원소들의 상한값
LBOUND : ARRAY에 사용된 원소들의 하한값
MAX : 최대값
MIN : 최소값
MOD : 나눗셈에서의 나머지
SIGN : 변수의 부호 또는 0
SQRT : 제곱근
2. 반올림(Truncation) 관련 함수
숫자의 일부를 잘라내는 기능을 가진 함수로서, 반올림, 올림, 내림 그리고 정수(integer)로 만드는 기능을 갖고 있습니다.
함수 이름기능예시
CEIL(argument) | 변수보다 큰 수이면서 제일 작은 정수 | CEIL(4.2) => 5 |
FLOOR(argument) | 변수보다 적은 수이면서 제일 큰 정수 | FLOOR(4.8) => 4 |
INT(argument) | 정수 부분만을 취합니다. | INT(4.8) => 4 |
ROUND(argument, 반올림단위) | 반올림한 값을 반환합니다. | ROUND(4.567, 2) => 4.57 |
TRUNC(argument, 반올림단위) | 특정 길이만큼 소수 부분을 제거한 값을 반환합니다. | TRUNC(4.567, 2) => 4.56 |
3. 수학적 연산 함수
수학적 함수와 관련된 기능을 제공하고 있습니다.
함수 이름기능예시
DIGAMMA | GAMMA 함수의 LOG의 미분값 | DIGAMMA(5) => 1.506 |
ERF | Error function | ERF(1) => 0.8427 |
ERFC | Error function의 complement | ERFC(1) => 0.1573 |
EXP | 지수 함수 | EXP(1) => 2.7183 |
GAMMA | complete Gamma Function | GAMMA(5) => 24 |
LGAMMA | 주어진 값의 GAMMA function의 자연 로그 계산 | LGAMMA(5) => 3.1781 |
LOG | 자연 로그 (base가 e) | LOG(10) => 2.3026 |
LOG2 | base가 2인 로그 | LOG2(8) => 3 |
LOG10 | 상용 로그 (base가 10) | LOG10(100) => 2 |
4. 삼각함수와 Hyperbolic 함수와 관련된 기능
삼각함수 관련된 기능을 제공하고 있습니다.
함수 이름기능예시
ARCOS(argument) | arc cosine 계산, cosine의 역함수 | ARCOS(1) => 0 |
ARSIN(argument) | arc sine 계산 | ARSIN(0) => 0 |
ATAN(argument) | arc tangent 계산 | ATAN(1) => π/4 |
COS(argument) | cosine 계산 | COS(π/2) => 0 |
SIN(argument) | sine 계산 | SIN(π/2) => 1 |
TAN(argument) | tangent 계산 | TAN(π/4) => 1 |
TANH(argument) | hyperbolic tangent 계산 | TANH(1) => 0.7616 |
5. 통계관련 함수
함수 이름기능예시
CSS(argument, ...) | 수정된 제곱합 (Corrected Sum of Squares) | CSS(1, 2, 3) => 2 |
CV(argument, ...) | 변이계수 (Coefficient of Variation) | CV(1, 2, 3) => 0.527 |
KURTOSIS(argument, ...) | 첨도 (Kurtosis) | KURTOSIS(1, 2, 3) => -1.5 |
MAX(argument, ...) | 최대값 (Maximum) | MAX(1, 2, 3) => 3 |
MIN(argument, ...) | 최소값 (Minimum) | MIN(1, 2, 3) => 1 |
MEAN(argument, ...) | 산술평균값 (Mean) | MEAN(1, 2, 3) => 2 |
N(argument, ...) | 계산에 이용된 Missing이 아닌 자료 개수 | N(1, 2, None) => 2 |
NMISS(argument, ...) | Missing 자료 갯수 | NMISS(1, 2, None) => 1 |
RANGE(argument, ...) | 범위 (Range) | RANGE(1, 2, 3) => 2 |
SKEWNESS(argument, ...) | 왜도 (Skewness) | SKEWNESS(1, 2, 3) => 0 |
STD(argument, ...) | 표준편차 (Standard Deviation) | STD(1, 2, 3) => 1 |
STDERR(argument, ...) | 표준오차 (Standard Error) | STDERR(1, 2, 3) => 0.577 |
SUM(argument, ...) | 합계 (Sum) | SUM(1, 2, 3) => 6 |
USS(argument, ...) | 제곱합 (Uncorrected Sum of Squares) | USS(1, 2, 3) => 14 |
VAR(argument, ...) | 분산 (Variance) | VAR(1, 2, 3) => 1 |
6. 통계적 확률분포와 관련된 함수
통계학에는 여러 가지 확률분포가 있습니다. 다음은 확률분포와 관련된 함수 리스트입니다.
함수 이름기능예시
POISSON(lamda, x) | 포아송 분포 (Poisson Probability distribution function) | POISSON(2, 3) => 0.1804 |
PROBBETA(x, a, b) | 베타 분포 (Beta Probability distribution function) | PROBBETA(0.5, 2, 2) => 0.5 |
PROBNML(p, n, x) | 이항 분포 (Binomial Probability distribution function) | PROBNML(0.5, 10, 5) => 0.246 |
PROBCHI(x, df) | 카이제곱 분포 (Chi-squared Probability distribution function) | PROBCHI(3.84, 1) => 0.05 |
PROBF(x, ndf, ddf) | F 분포 (F distribution function) | PROBF(2.96, 5, 2) => 0.1 |
PROBGAM(x, a) | 감마 분포 (Gamma distribution function) | PROBGAM(2, 3) => 0.323 |
PROBHYPR | 초기하 분포 (Hypergeometric distribution function) | PROBHYPR(7, 10, 4) => 0.467 |
PROBNEGB | 음이항 분포 (Negative Binomial distribution function) | PROBNEGB(2, 5) => 0.3 |
PROBNORM | 표준 정규 분포 (Normal distribution function) | PROBNORM(0) => 0.5 |
PROBT | t 분포 (Student's t-distribution function) | PROBT(2.1, 10) => 0.05 |
7. Quantile 함수
분위수를 구하는 함수입니다.
함수 이름기능예시
BETAINV | 베타 함수의 역함수 | BETAINV(0.5, 2, 2) => 0.5 |
CINV | 카이제곱 분포의 Quantile | CINV(0.95, 10) => 18.31 |
FINV | F 분포의 Quantile | FINV(0.95, 5, 2) => 19.33 |
GAMINV | 감마 분포의 역함수 | GAMINV(0.95, 3) => 7.81 |
PROBIT | 정규 분포의 역함수 | PROBIT(0.95) => 1.645 |
TINV | t 분포의 역함수 | TINV(0.95, 10) => 2.228 |
8. 난수 발생과 관련된 함수
각 분포에 따라 난수를 발생하는 함수입니다.
함수 이름기능예시
NORMAL | Normally distributed 난수 생성 | NORMAL(mean, stddev) |
RANBIN | 이항 분포로 관측치 생성 | RANBIN(n, p) |
RANCAU | Cauchy Deviate 생성 | RANCAU(location, scale) |
RANEXP | Exponential deviate 생성 | RANEXP(rate) |
RANGAM | 감마 분포로부터 관측치 생성 | RANGAM(shape, scale) |
RANNOR | Normal deviate 생성 | RANNOR(mean, stddev) |
RANPOI | Poisson 분포로부터 관측치 생성 | RANPOI(lambda) |
RANUNI | Uniform deviate 생성 | RANUNI(a, b) |
UNIFORM | [0,1] 범위에서의 uniform 분포를 따르는 난수 생성 | UNIFORM() |
9. 문자와 관련된 함수
문자와 관련된 기능으로는 다음과 같은 것이 있습니다. 문자다루기는 8강에서 상세히 설명하고 있습니다.
함수 이름기능예시
BYTE | ASCII 코드를 문자로 변형 | BYTE(65) => A |
INDEX(소스, 찾는문자) | 찾는 문자의 위치를 반환 | INDEX("hello", "e") => 2 |
LEFT | 왼쪽의 빈칸을 제거 | LEFT(" hello") => "hello" |
LENGTH | 변수의 길이 계산 | LENGTH("hello") => 5 |
LOWCASE | 대문자를 소문자로 변환 | LOWCASE("HELLO") => "hello" |
REVERSE | 문자의 내용을 거꾸로 배열 | REVERSE("hello") => "olleh" |
RIGHT | 오른쪽 빈칸을 제거 | RIGHT("hello ") => "hello" |
SUBSTR | 문자에서의 일부를 추출 | SUBSTR("hello", 2, 3) => "ell" |
TRANSLATE(소스, 새문자, 원래문자) | 소스에서 특정 문자열을 바꿈 | TRANSLATE("hello", "a", "e") => "hallo" |
TRIM | 빈칸을 제거 | TRIM(" hello ") => "hello" |
UPCASE | 소문자를 대문자로 변환 | UPCASE("hello") => "HELLO" |
이 외에도 COLLATE, COMPRESS, INDEX, INDEXC, LEFT, RANK, REPEAT, REVERSE, RIGHT, SCAN, TRANSLATE, VERIFY 같은 다양한 함수들이 있다.
10. 날짜 계산과 관련된 기능
날짜와 관련된 기능으로는 다음과 같은 것이 있습니다. 날짜다루기는 8강에서 상세히 설명하고 있습니다.
함수 이름기능예시
DATE | 현재의 날짜를 SAS Date 값으로 변환 | DATE() => 22345 (현재 날짜의 SAS Date 값) |
DATEJUL | Julian-date를 SAS Date 값으로 변환 | DATEJUL(2024200) => 22345 |
DATETIME | 현재의 날짜와 시간을 계산 | DATETIME() => 1934690475 (현재 Datetime 값) |
DAY | SAS Date 값으로부터 그 달의 날짜를 계산 | DAY('01JAN2024'd) => 1 |
DHMS(date, hour, minute, second) | date, hour, minute, second로부터 SAS Datetime 계산 | DHMS('01JAN2024'd, 12, 0, 0) => 1934690400 |
이 외에도 DATEPART, HMS, HOUR, INTCK, INTNX, JULDATE, MDY, MINUTE, MONTH, QTR, SECOND, TIME, TIMEPART, TODAY, WEEKDAY, YEAR, YYQ 등 다양한 함수들이 있습니다.
11. 기타 - 배열 및 데이터 변환 함수
함수 이름기능예시
DIM(ARRAY명) | ARRAY 문의 원소들의 수 | DIM(myArray) => 5 |
HBOUND(ARRAY명) | ARRAY에 사용된 원소들의 상한값 | HBOUND(myArray) => 10 |
LBOUND(ARRAY명) | ARRAY에 사용된 원소들의 하한값 | LBOUND(myArray) => 1 |
DIFn | n-th 차이를 계산 | DIF3(x) => x - lag3(x) |
LAGn | n-th Lagged 값을 계산 | LAG3(x) => x의 3번째 이전 값 |
INPUT(소스, informat) | 문자 변수를 숫자형 변수로 변환 | INPUT('123', 8.) => 123 |
PUT(소스, format) | 숫자형 변수를 문자형 변수로 변환 | PUT(123, $8.) => '123' |