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 앞과 뒤의 공백의 제거
|
|
[수업 예시]





# 난수함수
1) uniform 함수 -> RANUNI
2) 표준정규함수 -> RANNOR

[1단계]
ex5 는 하나만 나오는데
ex5_1은 output 해줘서 1부터 10000까지 다 표시해줌

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

근데 이제 VAR 로 변수를 x로만 지정해주면 이렇게 나옴
var : 변수 지정
# 날짜함수

[수업 예시]
1) 날짜 불러오기


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글자 씀
"숫자"자료는 "오른쪽" 정렬
"문자"자료는 "왼쪽" 정렬
=====함수들 =====
'데이터 스터디 > SAS' 카테고리의 다른 글
SAS - 구분자(dlm, dsd) , 할당문, 날짜함수 (0) | 2023.03.22 |
---|---|
SAS - 변수 속성 할당 (0) | 2023.03.22 |
SAS - 데이터 읽기 실습 (input, infile, proc import, dlm='') (0) | 2023.03.22 |
SAS - raw 데이터 읽기 (length, & : 연산자) (0) | 2023.03.22 |
SAS - 데이터 입력 및 읽기 (list input, column input, formatted input, set, infile) (1) | 2023.03.22 |