4장. DATA STEP 2
01. 변수의 정의 02. 새로운 변수 생성
03. SAS 함수
# SAS 함수
-SAS함수는 해당 함수명과 그에 따르는 인수를 필요로 하며 반드시 괄호() 안에 입력해야 한다.
- 기본 형식 : 함수명(인수1, 인수2, ----)
- 난수함수 : 특정 분포로부터 유사 확률난수를 발생
- 확률밀도함수와 분포함수
-표본통계량함수 : 총 17가지 표본통계량
-산술함수 : 최소, 최대, 평균 등
- 수학함수 : 지수, 로그, 감마함수 등
-분위수함수 : 특정확률분포의 분위수 계산
- 문자함수 : 특정문자에 대한 연산을 수행
# 문자함수
![](https://blog.kakaocdn.net/dn/qJd7i/btr5cTCT91v/GE6GKc0YVq1Ypb9lP8CWGK/img.png)
![](https://blog.kakaocdn.net/dn/AFkPG/btr5nHHlgZa/LKOLk5bvUt2x7TGXQKevdK/img.png)
ex) TRIM
- trim 옵션과 ||를 이용하여 공백없이 다른 열의 data 붙이기
[예시]
![](https://blog.kakaocdn.net/dn/LzcAV/btr5gQLAYb7/vpwYk3DRBfkRsPmmbS8Un1/img.png)
1단계. 데이터셋 a_1 만들기
![](https://blog.kakaocdn.net/dn/ctDDko/btr5nL32J9y/tdKUgLUVUb91g3schA2RK1/img.png)
2단계. || 만으로 붙이기
c 에 a랑 b 사이에 공백 생겨
![](https://blog.kakaocdn.net/dn/cJfZee/btr5dR5CzLU/ScabXSIkdSP3GKqkl2NQZ1/img.png)
3단계. trim 명령어 이용하기
c열이 공백 없이 a와 b 붙여넣기 성공
>주의할 점은 ||을 이용할 때 변수는 문자 !<
>trim에 인수넣을 때 괄호 안에 !<
+) [수업 예시]
1) find, substr
![](https://blog.kakaocdn.net/dn/tEb1E/btr5epA1Wg1/GJ1t7wk6pCv8nL5XRGeIS0/img.png)
한글은 2바이트고, ( ) 괄호는 각가 1바이트 -> 총 10바이트
![](https://blog.kakaocdn.net/dn/407Lc/btr5deUBpB1/KdgcGPCUoKm4q8gdWmVoJ1/img.png)
이때 find함수로 x에 해당하는 '한국(투자)'에서 ( 의 위치 = 3
에서 1 빼면 최종적으로 2
substr은 x의 첫번째 글자에서 시작해서 총 2글자 읽어라 = 한국
2) substr
![](https://blog.kakaocdn.net/dn/VJJUE/btr5detrRnS/AEKaFrnZ29W0IqiDU67t8K/img.png)
var1 은 010-1234-5678 의 5번째 글자 1에서 시작해서 4개 읽음 = 1234
var2는 010-1234-5678 의 10번째 글자 5에서 끝까지 읽음 = 5678
이때, 글자 길이 수가 지정되어 있지 않으면 끝까지 읽으면 됨 !
3) _null_ 지정과 put문 , substr
![](https://blog.kakaocdn.net/dn/63ZJ2/btr5aGqhGVE/5VBDjW4BvunwRVQzXbSj8K/img.png)
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 앞과 뒤의 공백의 제거
|
|
[수업 예시]
![](https://blog.kakaocdn.net/dn/IKVKP/btr5cCVGDy0/CSQWckii7ujYdeik0StNt0/img.png)
![](https://blog.kakaocdn.net/dn/wCC8S/btr5d2zgReG/taDFOSziuDqwv4wgZqMMA0/img.png)
![](https://blog.kakaocdn.net/dn/c5ACxo/btr5dp9mEdu/bQYEimBRVfrgIivEhIOxW1/img.png)
![](https://blog.kakaocdn.net/dn/b56lNw/btr5gvOe829/G7nGvcKWP0FBWJcm4q8qKk/img.png)
![](https://blog.kakaocdn.net/dn/ZdqU7/btr5aGDNvMP/NyCiYVVKR3bwPoks6dwXd0/img.png)
# 난수함수
1) uniform 함수 -> RANUNI
2) 표준정규함수 -> RANNOR
![](https://blog.kakaocdn.net/dn/p2o3l/btr5flE8bvl/W3KyyFDU3Nny3svoioQw41/img.png)
[1단계]
ex5 는 하나만 나오는데
ex5_1은 output 해줘서 1부터 10000까지 다 표시해줌
![](https://blog.kakaocdn.net/dn/cEeOfv/btr49TKcASh/0SRlqKSpg55FQlBkotn3b0/img.png)
[2단계]
PROC MEANS 는 5개의 기초통계량을 보여준다.
![](https://blog.kakaocdn.net/dn/cAapzC/btr49Uvx7PA/4Eywe2dBK87Ru4wIZe6jek/img.png)
근데 이제 VAR 로 변수를 x로만 지정해주면 이렇게 나옴
var : 변수 지정
# 날짜함수
![](https://blog.kakaocdn.net/dn/cU7MJi/btr5jcOplTe/uGkKwtYwiAYcEwxlXN7ec1/img.png)
[수업 예시]
1) 날짜 불러오기
![](https://blog.kakaocdn.net/dn/rDGGV/btr5gv1MUTX/RpKYl9gybzb3u4NOEIpl4K/img.png)
![](https://blog.kakaocdn.net/dn/bnnQs5/btr5df0cv6f/JgPdv9A190EFXnMG37oRgK/img.png)
2) 주민번호로 나이 계산하기
- 주민번호의 연도부분만 잘라내어 1900년을 더한다.
- 현재날짜의 연도를 계산하여 나이 연수를 만들어 낸가
- 현재날짜는 date() 또는 today()를 사용한다.
![](https://blog.kakaocdn.net/dn/bFBr0h/btr5dfMGVrf/oD6DKGClfFa3kO6Psub161/img.png)
로그 창에 PUT으로 지정한 변수들이 쫙 나온다.
![](https://blog.kakaocdn.net/dn/RdaHS/btr5dd2lScM/i0sBLSX2qA7uF40nr88xVK/img.png)
이때, NULL변수가 아니라 직접 age1 데이터셋에 저장한거면
proc print 해주면 age1의 모든 변수들 (id, birth_year, today, present_year, age) 가 다 나온다.
![](https://blog.kakaocdn.net/dn/brUXxC/btr45joDS2o/7f0WAUWjoQ4giBLsvB39B0/img.png)
여기에 kepp=age 해주면 결과창에 age변수만 나온다.
![](https://blog.kakaocdn.net/dn/bJyWfg/btr5e6OWcbE/tTUaFzN3p7j8Yp3TrmhcK1/img.png)
그리고 obs부분도 보기 싫다면 noobs 라고 해줘라.
# 숫자함수 & 절단함수
![](https://blog.kakaocdn.net/dn/dbL9pY/btr5fPlTjye/sBkdFlMx5xS1vrAmrKocI0/img.png)
[수업 예시]
1) 절단 함수 : ROUND, INT , CEIL, FLOOR
![](https://blog.kakaocdn.net/dn/wlYYo/btr5dzKVt5W/3JIxLgXYedtGTFWadmiyOk/img.png)
CEIL 함수 : 올림하기
FLOOR함수 : 내림하기 -5 -> -6
INT함수 : 정수만 추출 (소수점 버려)
ROUND함수 : 지정된 자리수에서 반올림. 즉 지정된 자리수까지 보여줘야해. 0.1이면 0.01자리에서 반올림해서 나타냄
2) 숫자함수
![](https://blog.kakaocdn.net/dn/bmqgPK/btr45j9ZmMY/u74qZ8iAwHIioNmFFZ6cmK/img.png)
(x1-x3)에 한자리 수 씩 넣어준다! 그리고 .는 결측값임. SAS에서는 결측값 무시하고 없던 애로 취급함
# 형변환함수
![](https://blog.kakaocdn.net/dn/mub6M/btr5nGn7UhS/TvBWqKM6LSCuaPUWBcsmR0/img.png)
[수업 예시]
1)INPUT : 문자변수를 숫자변수로 바꾸기
![](https://blog.kakaocdn.net/dn/R9GuX/btr5fmKOWlj/BHwWgKzD4ia7mtOKBz1zk0/img.png)
INPUT은 문자를 숫자로 변환시킴
COMMA9. 은 COMMA떼고 숫자만 나오게끔 해줌
2)PUT : 숫자변수를 문자변수로 바꾸기
![](https://blog.kakaocdn.net/dn/dkhjaR/btr5deAgydf/b8Dfwkkstlc4UMaz6UQ02K/img.png)
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 |