데이터 스터디/SAS

SAS - 함수(문자, 난수, 날짜, 숫자 절단, 형변환)

케이와이엠 2023. 3. 22. 12:17

4장. DATA STEP 2

01. 변수의 정의 02. 새로운 변수 생성

03. SAS 함수

 

# SAS 함수

-SAS함수는 해당 함수명과 그에 따르는 인수를 필요로 하며 반드시 괄호() 안에 입력해야 한다.

- 기본 형식 : 함수명(인수1, 인수2, ----)

- 난수함수 : 특정 분포로부터 유사 확률난수를 발생

- 확률밀도함수 분포함수

-표본통계량함수 : 총 17가지 표본통계량

-산술함수 : 최소, 최대, 평균 등

- 수학함수 : 지수, 로그, 감마함수 등

-분위수함수 : 특정확률분포의 분위수 계산

- 문자함수 : 특정문자에 대한 연산을 수행


# 문자함수

 

ex) TRIM

- trim 옵션과 ||를 이용하여 공백없이 다른 열의 data 붙이기

[예시]

1단계. 데이터셋 a_1 만들기

2단계. || 만으로 붙이기

c 에 a랑 b 사이에 공백 생겨

 

3단계. trim 명령어 이용하기

c열이 공백 없이 a와 b 붙여넣기 성공

>주의할 점은 ||을 이용할 때 변수는 문자 !<

>trim에 인수넣을 때 괄호 안에 !<

+) [수업 예시]

1) find, substr

한글은 2바이트고, ( ) 괄호는 각가 1바이트 -> 총 10바이트

 

 

 

이때 find함수로 x에 해당하는 '한국(투자)'에서 ( 의 위치 = 3

에서 1 빼면 최종적으로 2

substr은 x의 첫번째 글자에서 시작해서 총 2글자 읽어라 = 한국

 

 

2) substr

var1 은 010-1234-5678 의 5번째 글자 1에서 시작해서 4개 읽음 = 1234

var2는 010-1234-5678 의 10번째 글자 5에서 끝까지 읽음 = 5678

이때, 글자 길이 수가 지정되어 있지 않으면 끝까지 읽으면 됨 !

 

3) _null_ 지정과 put문 , substr

 

NULL변수는 데이터를 WORK라이브러리에 저장하지 않음!

PUT문이랑 같이 써서 값을 내기만 함

PUT문장은 데이터의 중간 계산 과정을 로그화면에 출력

 

따라서 로그화면에 <ID값 -----> GENDER값> 형태로 출력


# 자주 사용하는 공백제거 함수

 
COMPRESS(var1)
1) 모든 공백 및 특수문자 삭제
2) 앞쪽에 있는 문자함수 또는 문자열 중에서 뒤쪽의 문자함수 또는 문자열에 포함되는 문자를 모두 제거한다.
1)COMPRESS('경 상 도') -> 경상도
2) COMPRESS('K.Y.M # 1991','#:,.')
-> KYM1991
TRIM(argument1) || argument2
문자열 뒤의 공백 제거
* 문자 앞 공백은 그대로 둬 !
TRIM('A ') || '*" || ' C' -> A* C
문자 뒤 공백은 지우고 앞에 공백은 나둬
CATX(구분자, argument1, argument2 --)
결합대상 STRING 들의 앞 뒤 공백 제거하고 구분자를 넣어 문자열을 결합
CATX('!','A ','C') -> A!C
따옴표 안에 공백있으면 다 제거하고 결과만!
STRIP
string 앞과 뒤의 공백의 제거
 

 

[수업 예시]

A에 4바이트 지정해줘
COMPRESS, TRIM, CATX, STRIP 써봤어
 

 

근데 이제 TRIM은 앞에 공백은 그대로 나둬줘

 

 

 

# 난수함수

1) uniform 함수 -> RANUNI

2) 표준정규함수 -> RANNOR

[1단계]

ex5 는 하나만 나오는데

ex5_1은 output 해줘서 1부터 10000까지 다 표시해줌

 

[2단계]

PROC MEANS 는 5개의 기초통계량을 보여준다.

근데 이제 VAR 로 변수를 x로만 지정해주면 이렇게 나옴

var : 변수 지정


# 날짜함수

[수업 예시]

1) 날짜 불러오기

today 함수 date 함수 datetime 함수 time 함수

 

format 지정해서 입력형식 부여함.

 

2) 주민번호로 나이 계산하기

- 주민번호의 연도부분만 잘라내어 1900년을 더한다.

- 현재날짜의 연도를 계산하여 나이 연수를 만들어 낸가

- 현재날짜는 date() 또는 today()를 사용한다.

 

로그 창에 PUT으로 지정한 변수들이 쫙 나온다.

이때, NULL변수가 아니라 직접 age1 데이터셋에 저장한거면

proc print 해주면 age1의 모든 변수들 (id, birth_year, today, present_year, age) 가 다 나온다.

 

 

여기에 kepp=age 해주면 결과창에 age변수만 나온다.

 

그리고 obs부분도 보기 싫다면 noobs 라고 해줘라.


# 숫자함수 & 절단함수

[수업 예시]

1) 절단 함수 : ROUND, INT , CEIL, FLOOR

CEIL 함수 : 올림하기

FLOOR함수 : 내림하기 -5 -> -6

INT함수 : 정수만 추출 (소수점 버려)

ROUND함수 : 지정된 자리수에서 반올림. 즉 지정된 자리수까지 보여줘야해. 0.1이면 0.01자리에서 반올림해서 나타냄

 

2) 숫자함수

(x1-x3)에 한자리 수 씩 넣어준다! 그리고 .는 결측값임. SAS에서는 결측값 무시하고 없던 애로 취급함


# 형변환함수

[수업 예시]

1)INPUT : 문자변수를 숫자변수로 바꾸기

INPUT은 문자를 숫자로 변환시킴

COMMA9. 은 COMMA떼고 숫자만 나오게끔 해줌

 

2)PUT : 숫자변수를 문자변수로 바꾸기

put : 숫자 20200305를 문자로 바꿈

ymd는 숫자여서 뒤로 붙음

fmtymd는 문자로 바꿔서 앞에 붙고 cyear도 뒤에 붙음

nyear는 input으로 숫자취급 4글자 씀

"숫자"자료는 "오른쪽" 정렬

"문자"자료는 "왼쪽" 정렬

 

=====함수들 =====