4학년 1학기 전공으로 개설된 "보건의료빅데이터분석론"이라는 수업을 듣게되었다.
지금까지 혼자 공부해왔던 R이 아닌, SAS로 통계분석을 해볼수 있었던 한 학기였다.
SAS도 한번은 해보고 싶은 생각이 있었지만, 무료인 R에 비해 설치 비용이 비싸고, 복잡하다는 후기가 많아 R을 선택했었다.
하지만 수업을 통해 가상화 프로그램으로 SAS를 작동시킬수 있다는 꿀팁을 알게 되었고, 비록 무료버전이라 골치가 아팠지만,,
새로운 걸 배울 수 있는 좋은 기회였다고 한다 :)
전공 수업 15주차 중 약 2주차는 SAS 기본 설명, 8주차는 SAS 기본 코드 설명, 4주차는 실습, 마지막주차는 기말고사를 보는 것으로 구성되었다. SAS 코드는 R과 다른점이 정말 정말 많다. 이번 포스팅에서는 수업때 배운 것을 바탕으로 SAS 기본 코드에 대해 정리하고자한다.
* SAS의 기본 중 기본!
- SAS는 모든 구문을 띄어쓰기로 구분한다. 따라서 변수명이나 데이터명에 띄어쓰기를 넣어버리면 오류 발생!
- 한 구문이 끝날때 무조건 ; 붙히기, 명령이 끝나면 run; 붙히기 (둘다 안붙히면 오류뜸)
- SAS는 대소문자를 구분하지 않는다! (R과 다른점이기도 하다. R은 대소문자 신경써야하지만 SAS는 둘다 똑같은 것으로 인식)
1. 데이터셋 불러오기
라이브러리를 설정해주면 영구라이브러리가 되고, 따로 설정하지 않으면 데이터는 임시라이브러리인 work 라이브러리에 저장
data new;
set example; /*work라이브러리의 example 데이터를 이용해 work 라이브러리에 new 데이터 생성*/
run;
data region.a;
set example; /*work 라이브러리의 example 데이터를 이용해 region이라는 영구라이브러리에 a라는 데이터 생성*/
run;
2. 데이터 세로결합
data example2;
set example1; /*example1을 가져와 example2 데이터 생성*/
by ID; /*example2의 기준은 ID*/
average = (MID+FIN)/2; /*example2 데이터에 중간 기말 점수 평균을 낸 average 변수 추가*/
if sex = 'm'; /*성별 남자인 경우만 추출, 문자형 변수는 작은 따옴표로 구분*/
run;
data total;
set example1 example2 example3; run; /*example1,2,3을 세로결합해 total 데이터 생성*/
3. 데이터 가로결합
data total;
merge example1 example2;
by ID; run; /*가로 결합 시 결합 기준이 되는 by 구문은 필수!*/
위의 구문처럼 데이터 지정없이 결합하면 merge 구문 중 뒤에 있는 데이터인 example2 데이터가 example1 데이터를 덮어버린다.
하지만 아래처럼 (in=)구문을 이용해 데이터를 지정해주면, in이 있는 데이터셋에 다른 데이터셋을 붙힐 수 있다.
data total;
merge example1(in=apple) example2;
by id;
if apple; run;
위 구문은 example1에 (in=)이 지정되어있으므로 example2를 example1에 붙힌 결과가 출력될 것이다.
(in = ______)에서 밑줄에는 아무 단어나 올 수 있다. banana라고 써도 되고, grape을 써도된다.
그 뒤 if구문에 똑같은 단어를 적어주기만 하면 됨!
4. KEEP,DROP,RENAME
data a;
set example;
keep age sex; run; /*example데이터에서 age sex 변수만 keep해서 데이터 a 생성*/
data b; set example;
drop age sex; run; /*example데이터에서 age sex 변수만 버리고 데이터 b 생성*/
data c; set a;
rename age = nai; /*a데이터에서 age라는 변수명을 nai로 변경해서 c데이터 생성*/ /*rename 원래변수명 = 바꿀변수명*/
run;
5. OUTPUT
OUTPUT은 데이터셋으로 바로 출력할 수 있는 구문이다.
data b1 b2;
set example; /*example 데이터로 b1 b2 데이터셋을 만듬*/
if bogun_cd = 001 then output b1; /*bogun_cd 값이 001이면 데이터셋 b1 지정*/
else output b2; run; /*나머지는 데이터셋 b2로 지정*/
6. IF ELSE THEN 구문
아래처럼 구문에서 바로 새로운 변수를 생성할 수 있다.
data a; set example1;
if age < 30 then agegp = 1; /*age 30 이하이면 agegp(새변수)는 1로 지정*/
else if age < 40 then agegp = 2; /*age 30 이상 40 이하이면 agegp(새변수)는 2로 지정*/
else delete; run; /*해당하지않는 나머지 age 데이터들은 삭제 */
또한, 다양한 변수들을 한번에 사용 할 수도 있다.
data b; set example1;
if age < 30 and sex = 1 then var = 1; /*age 30 이하 성별 1이면 var(새변수)는 1로 지정*/
else if age < 40 and sex = 1 then var = 2; run; /*age 30 이상 40 이하, 성별 1이면 var(새변수)는 1로 지정*/
변수명 in(a,b,c) = 변수가 a,b,c에 포함되면~
data c; set example1;
if age in(30,40,50) then agegp = 1; run; /*age가 30,40,50에 해당되면 agegp(새변수)는 1로 지정*/
drop 변수: 변수를 아예 삭제함
delete: 조건에 해당하는 데이터만 삭제함
7. SUBSTR
해당변수에서 a번째 문자부터 b개 추출하는 구문
data a; set example;
s=substr(wt,3,4); run; /*wt변수를 3번째자리부터 4개 추출하여 s 변수 생성*/
wt = abcdefghi일 경우, s = cdef
8. Input문
input (문자변수, informat); 문자변수를 숫자변수로 변경
put (숫자변수, format); 숫자변수를 문자변수로 변경
tip) 문자변수 * 1; 구문을 이용하면 문자변수를 숫자변수로 변경할 수 있는 편리한 꿀팁!
8주에 거쳐 정말 많은 기본 코드들을 배웠지만, 그중 많이 쓰인다고 교수님께서 강조하신 구문들만 정리를 해보았다.
이 외에도 데이터를 직접 입력하는 input문, 변수명에 특정 이름을 지정해주는 lable문 등 많은 구문들이 있다.
다음 포스트에서는 proc format, proc print, proc logistic 등 proc 구문들만 따로 뽑아서 정리할 예정이다. ^^
'(통계분석) SAS' 카테고리의 다른 글
21.06.14~21.06.16 통계특강 내용 정리(1) (0) | 2021.06.28 |
---|---|
주관적 스트레스 수준이 비만에 미치는 영향 (SAS 분석 실전) (0) | 2021.06.25 |
건강보험종류에 따른 연간 입원/외래 이용 분석 (0) | 2021.06.25 |
PROC GLM & PROC LOGISTIC 활용 실습 (0) | 2021.06.25 |
SAS 기본 코드(2) (0) | 2021.06.23 |