반응형

[SAS] 변수 계산 (산술 연산) - DATA, SET

 주어진 데이터의 값을 바꾸어 사용해야 할 때가 있다. 이번 포스팅에서는 다음의 연산들을 소개할 것이다.

 

산술 연산

1) 더하기

2) 빼기

3) 곱하기

4) 나누기

5) 제곱 (승)

6) 로그 (log)

7) 지수

 

*실습용 데이터는 아래 링크를 클릭하면 다운로드할 수 있습니다.

2022.08.04 - [공지사항 및 소개] - 분석용 데이터 (update 22.10.06)

 

분석용 데이터 (update 22.10.06)

2022년 08월 29일 버전입니다. 변수는 계속하여 추가될 예정입니다. 다음 카테고리에 있는 글에서 이용된 데이터입니다. - 기술 통계 - 통계 프로그램 사용 방법 1) 엑셀 파일 2) CSV 파일 3) 코드북

medistat.tistory.com

 

시작하기 위해 라이브러리를 만들고, 파일을 불러온다.

라이브러리 만드는 방법: 2022.08.05 - [통계 프로그램 사용 방법/SAS] - [SAS] 라이브러리 만들기 - LIBNAME

파일 불러오는 방법: 2022.08.05 - [통계 프로그램 사용 방법/SAS] - [SAS] 데이터 불러오기 및 저장하기 - PROC IMPORT, PROC EXPORT

 

*라이브러리 지정하기;
LIBNAME hong "C:/Users/User/Documents/Tistory_blog";

*파일 불러오기;
PROC IMPORT
DATAFILE="C:\Users\user\Documents\Tistory_blog\Data.xlsx"
DBMS=EXCEL
OUT=hong.df
REPLACE;
RUN;

 

코드

DATA hong.df_new;
SET hong.df;

*1) 더하기;
LIVER_SUM=AST+ALT;

*2) 빼기;
ALT_DIF=ALT-ALT_POSTMED;

*3) 곱하기;
MALE_ALC=SEX*ALCOHOL;

*4) 나누기;
LIVER_RATIO=AST/ALT;

*5) 거듭제곱 (승);
SBP_SQ=SBP**2;

*6) 로그 (log);
LOG_ALT=LOG(ALT);
LOG10_ALT=LOG10(ALT);
LOG7_ALT=LOG(ALT)/LOG(7);

*7) 지수;
EXP_ALT=EXP(ALT);
EXP10_ALT=EXP(ALT*log(10));

RUN;

DATA hong.df_new; : hong이라는 라이브러리에 df_new라는 이름을 가진 데이터 파일을 새로 만들 것이다. 
SET hong.df; : df_new라는 이름의 데이터파일에는 hong라이브러리에 있는 df파일을 갖다 넣어라.

*1) 더하기;
LIVER_SUM=AST+ALT; : AST와 ALT를 합쳐 그 값을 LIVER_SUM이라는 변수에 저장해라.

*2) 빼기;
ALT_DIF=ALT-ALT_POSTMED; : ALT에서 ALT_POSTMED를 빼서 그 값을 ALT_DIF라는 변수에 저장해라.

*3) 곱하기;
MALE_ALC=SEX*ALCOHOL; : SEX와 ALCOHOL을 곱해 MALE_ALC라는 변수에 저장해라.

*4) 나누기;
LIVER_RATIO=AST/ALT; : AST를 ALT로 나누어 그 값을 LIVER_RAIO라는 변수에 저장해라

*5) 거듭제곱 (승);
SBP_SQ=SBP**2; : SPB를 제곱하여 SBP_SQ에 저장해라. 만약 세제곱을 원한다면 "SBP**3"을 사용하면 된다.

*6) 로그 (log);
LOG_ALT=LOG(ALT); : ALT에 로그를 씌워 LOG_ALT에 저장해라. 이때 로그의 밑은 $e$다.
LOG10_ALT=LOG10(ALT); : ALT에 로그를 씌워 LOG_ALT에 저장해라. 이때 로그의 밑은 $10$이다.

LOG7_ALT=LOG(ALT)/LOG(7); : ALT에 로그를 씌워 LOG_ALT에 저장해라. 이때 로그의 밑은 $7$이다. 원하는 숫자를 밑으로 하고 싶으면 7이 아닌 원하는 숫자를 적으면 된다.

*7) 지수;
EXP_ALT=EXP(ALT); : $e$의 ALT승$\left(e^{ALT} \right)$을 EXP_ALT에 저장해라.
EXP10_ALT=EXP(ALT*log(10)); : $10$의 ALT승$\left(10^{ALT} \right)$을 EXP10_ALT에 저장해라. 만약 $10$이 아닌 $5$의 ALT승$\left(5^{ALT} \right)$를원하면 "log(5)"를 사용하면 된다.

 

 

결과

 SAS내 "탐색기"로 데이터를 보면 다음과 같이 새로운 변수들이 만들어진 것을 확인할 수 있다.

 

 

연산 시 결측치는 어떻게 처리되는가?

 연산 시 가장 중요한 것은 결측치가 어떻게 처리되는 것인가에 대한 내용이다. 왜냐하면 연산자에 따라 결측치를 결측치로 생각하는 경우가 있고, 0으로 생각하는 경우가 있기 때문이다. 추상적이라 이해가 어려울 테니 다음 예시를 보면 이해가 빠를 것이다.

 

변수 AST에는 8개의 결측치가 있음을 다음 코드로 확인할 수 있다. (PROC MEANS에 대한 내용은 다음 링크에서 확인할 수 있다. 2022.09.23 - [기술 통계/SAS] - [SAS] 기술 통계 (평균, 표준편차, 표준오차, 최댓값, 최솟값, 중위수, 분위수 등) - PROC UNIVARIATE, PROC MEANS)

 

결측치 확인 코드

PROC MEANS DATA=hong.df NMISS;
VAR AST;
RUN;

 

결측치  확인 결과

 

그러면 위에서 만든 변수 중 LIVER_SUM(=AST+ALT)은 어떻게 될까? 결측치의 개수를 확인해보자.

 

결측치 확인 코드

PROC MEANS DATA=hong.df_new nmiss;
VAR LIVER_SUM;
RUN;

결측치  확인 결과

 

결측치는 연산 결과도 결측치가 됨을 알 수 있다.

 

하지만 다음 링크에서 확인할 수 있듯이, 비교연산자 중 일부는 결측치를 0으로 인식하므로 코드를 주의해서 작성해야 한다.

2022.10.06 - [통계 프로그램 사용 방법/SAS] - [SAS] 변수 계산 (비교 연산) - DATA, SET, GE, LE, NE, IN, MIN, MAX

 

 

코드 정리

*라이브러리 지정하기;
LIBNAME hong "C:/Users/User/Documents/Tistory_blog";

*파일 불러오기;
PROC IMPORT
DATAFILE="C:\Users\user\Documents\Tistory_blog\Data.xlsx"
DBMS=EXCEL
OUT=hong.df
REPLACE;
RUN;

DATA hong.df_new;
SET hong.df;

*1) 더하기;
LIVER_SUM=AST+ALT;

*2) 빼기;
ALT_DIF=ALT-ALT_POSTMED;

*3) 곱하기;
MALE_ALC=SEX*ALCOHOL;

*4) 나누기;
LIVER_RATIO=AST/ALT;

*5) 거듭제곱 (승);
SBP_SQ=SBP**2;

*6) 로그 (log);
LOG_ALT=LOG(ALT);
LOG10_ALT=LOG10(ALT);
LOG7_ALT=LOG(ALT)/LOG(7);

*7) 지수;
EXP_ALT=EXP(ALT);
EXP10_ALT=EXP(ALT*log(10));

RUN;

 

SAS 변수 계산 (산술 연산) 정복 완료!

작성일: 2022.10.06.

최종 수정일: 2022.11.03.

이용 프로그램: SAS v9.4

운영체제: Windows 10

반응형

+ Recent posts