반응형

[SAS] 기술 통계 (평균, 표준편차, 표준오차, 최댓값, 최솟값, 중위수, 분위수 등) - PROC UNIVARIATE, PROC MEANS

 

 1,000명으로 어떤 연구를 했다고 하자. 그들의 키, 몸무게 등 지표들은 서로 다를 것이다. 논문의 저자가 이 모든 것을 독자들에게 보여주고자 한다면 행이 1,000인 표를 제시해야 할 것이다. 그렇게 큰 표를 실어줄 저널이 없기도 하거니와, 독자들이 보기에도 한눈에 들어오지 않는다. 그 대신 키의 '평균', 몸무게의 '평균'을 제시하면 한눈에 들어오니 보기가 좋다. 연속 변수는 평균, 표준편차 등으로 요약을 하여 보여주고, 범주형 자료 (흡연 여부, 음주 여부 등)는 도수분포표 혹은 분할표로 제시하게 된다. 분할표를 작성하는 방법은 다음 링크에서 확인할 수 있다. 2022.08.18 - [기술 통계/SAS] - [SAS] 도수분포표 (Frequency table), 분할표 (Contingency table) 만들기 - PROC FREQ

 

 

어떤 지표로 요약해줄 것인가?

1) 정규성을 따를 때: 평균 및 표준편차

 어떤 변수가 정규 분포를 따른다고 할 수 있다면, 평균과 표준편차만 알면 된다. 단 두 개의 지표만 있으면 전체 분포를 알아낼 수 있기 때문이다. (정규성을 따르는지는 정규성 검정으로 확인할 수 있으며 정규성 검정을 하는 방법은 다음 링크에서 확인할 수 있다.) 2022.08.12 - [기술 통계/SAS] - [SAS] 정규성 검정 - PROC UNIVARIATE

 

2) 정규성을 따르지 않을 때: 중위수, 최댓값, 최솟값, 분위수, 사분위 범위 등

 정규성을 따르지 않는다면 평균과 표준편차를 안다고 해도 전체 분포를 알아낼 수는 없다. 따라서 분포에 대한 직접적인 정보를 주는데, 예를 들어 '하위 25%에 위치하는 사람의 ALT값은 얼마인가?' 등을 제시하는 것이다. 그런 지표로는 중위수, 최댓값, 최솟값, 분 위수, 사분위 범위 등이 있다.

 

이번 포스팅에서는 이 모든 지표들 (평균, 표준편차, 표준오차, 중위수, 최댓값, 최솟값, 분위수, 사분위 범위 등)을 구하는 법에 대해 소개할 것이다.

 

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

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

 

분석용 데이터 (update 22.08.29)

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;


초보자용 (PROC UNIVARIATE)

제목에서도 알 수 있듯이 SAS에서 기술 통계량을 확인하는 방법은 대표적으로 PROC UNIVARIATE와 PROC MEANS가 있다. 둘 다 유용하지만 별다른 설정이 필요 없는 PROC UNIVARIATE가 초보자에게는 권장된다. 

 

 

코드

PROC UNIVARIATE DATA=hong.df ;
VAR ALT ;
RUN;

PROC UNIVARIATE DATA=hong.df : 기술 통계량을 산출하는 코드를 시작할 것이고, 데이터는 hong 라이브러리에 있는 df를 쓰겠다.
VAR ALT : 변수 "ALT"에 대한 기술 통계량을 보여달라.

결과

 

일반적으로 원하는 대부분의 통계량을 확인할 수 있다.

N(대상자수) 1000명

평균: 35.1159383

표준 편차: 5.00643005

분산: 25.0643419

표준 오차: 0.15831722

사분위수 범위(IQR, InterQuartile Range): 6.83472

 - 이 값은 Q3 (75 백분위수)에서 Q1 (25 백분위수)를 뺀 값과 같다.

최댓값: 49.0388

Q3 (75 백분위수): 38.5897

중위수 (50 백분위수): 35.1395

Q1 (25 백분위수): 31.7550

최솟값: 19.6178

 

사분위수는 SAS, SPSS, R의 결과가 서로 다를 수 있다. 왜냐하면 각 프로그램에서 사분위수를 구하는 방법이 다를 수 있기 때문이다. 각 프로그램에는 사분위수를 구하는 여러가지 방법이 내장되어 있으며, 골라서 사용할 수도 있다.

R의 사분위수 확인하기: 2022.09.27 - [기술 통계/R] - [R] 기술 통계 (평균, 표준편차, 표준오차, 최댓값, 최솟값, 중위수, 분위수 등)

SPSS의 사분위수 확인하기: 2022.09.29 - [기술 통계/SPSS] - [SPSS] 기술 통계 (평균, 표준편차, 표준오차, 최댓값, 최솟값, 중위수, 분위수 등)

 

코드

만약, 음주 여부에 따라 기술 통계량을 보고 싶다면 다음과 같이 "CLASS"구문을 추가하면 된다.

PROC UNIVARIATE DATA=hong.df ;
CLASS ALCOHOL;
VAR ALT ;

PROC UNIVARIATE DATA=hong.df : 기술 통계량을 산출하는 코드를 시작할 것이고, 데이터는 hong 라이브러리에 있는 df를 쓰겠다.

CLASS ALCOHOL : 음주 여부에 따라서 각각 결과를 산출하라
VAR ALT : 변수 "ALT"에 대한 기술 통계량을 보여달라.

 

결과

 

경력자용 (PROC MEANS)

 PROC UNIVARIATE은 정말 훌륭한 코드이지만 단점은 출력되는 결괏값이 너무 많다는 것이다. 그중에 필요한 것만 골라서 보고 싶다면 PROC MEANS가 더욱 적절하다. 물론 SAS에 익숙하지 않다면 코드가 복잡하게 느껴질 수도 있다.

 

기본 코드

PROC MEANS DATA=hong.df ;
VAR ALT ;
RUN;

PROC MEANS DATA=hong.df : 기술 통계량을 산출하는 코드를 시작할 것이고, 데이터는 hong 라이브러리에 있는 df를 쓰겠다.
VAR ALT : 변수 "ALT"에 대한 기술 통계량을 보여달라.

 

결과

보고 싶은 통계량을 지정해놓지 않으면 표본의 수, 평균, 표준편차, 최솟값, 최댓값을 보여준다.

 

코드

보고 싶은 통계량이 있다면 데이터 지정 후 모두 다 적어주면 된다.

예를 들어 표본의 수는 N, 평균은 MEAN, 표준편차는 STD인데 이 세 가지를 넣은 코드는 다음과 같다.

PROC MEANS DATA=hong.df N MEAN STD;
VAR ALT ;
RUN;

PROC MEANS DATA=hong.df N MEAN STD : 기술 통계량을 산출하는 코드를 시작할 것이고, 데이터는 hong 라이브러리에 있는 df를 쓰겠다. 통계량은 표본의 수, 평균, 표준편차만 보여달라.
VAR ALT : 변수 "ALT"에 대한 기술 통계량을 보여달라.

결과

 

비교적 자주 쓰는 통계량의 코드는 다음과 같다.

통계량 코드 통계량 코드
표본 수 N 평균의 신뢰구간 CLM
결측 수 NMISS 25백분위수 (1사분위수) P25 (Q1)
평균 MEAN 75백분위수 (3사분위수) P75 (Q3)
표준편차 STD 사분위 범위  QRANGE
표준오차 STDERR 1백분위수 P1
최솟값 MIN 5백분위수 P5
최댓값 MAX n0백분위수 Pn0 (i.e. P10, P20, P30, ...)
중위수 MEDIAN 95백분위수 P95
최빈값 MODE 99백분위수 P99

*CLM은 양측(two-sided) 신뢰구간을 구해준다. 만약 단측 (one-sided)신뢰구간을 구하고자 한다면 신뢰구간의 상한은 UCLM을, 하한은 LCLM을 사용하면 된다.

코드

만약, 음주 여부에 따라 기술 통계량을 보고 싶다면 다음과 같이 "CLASS"구문을 추가하면 된다.

PROC MEANS DATA=hong.df N MEAN STD;
CLASS ALCOHOL;
VAR ALT ;
RUN;

PROC MEANS DATA=hong.df N MEAN STD : 기술 통계량을 산출하는 코드를 시작할 것이고, 데이터는 hong 라이브러리에 있는 df를 쓰겠다. 통계량은 표본의 수, 평균, 표준편차만 보여달라.

CLASS ALCOHOL : 음주 여부에 따라서 각각 결과를 산출하라
VAR ALT : 변수 "ALT"에 대한 기술 통계량을 보여달라.

 

결과

 

코드

만약, 음주 여부에 따라 ALT와 수축기 혈압을 동시에 보고 싶다면 변수 자리에 수축기 혈압 변수를 같이 쓰면 된다.

PROC MEANS DATA=hong.df N MEAN STD;
CLASS ALCOHOL;
VAR ALT SBP;
RUN;

PROC MEANS DATA=hong.df N MEAN STD : 기술 통계량을 산출하는 코드를 시작할 것이고, 데이터는 hong 라이브러리에 있는 df를 쓰겠다. 통계량은 표본의 수, 평균, 표준편차만 보여달라.

CLASS ALCOHOL : 음주 여부에 따라서 각각 결과를 산출하라
VAR ALT SBP : 변수 "ALT"와 "SBP"에 대한 기술 통계량을 보여달라.

 

결과

코드 정리

*라이브러리 지정하기;
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;

*초보자용;
PROC UNIVARIATE DATA=hong.df ;
VAR ALT ;
RUN;

*(초보자용) 음주 여부에 따른 기술 통계량;
PROC UNIVARIATE DATA=hong.df ;
CLASS ALCOHOL;
VAR ALT ;

*경력자용;
PROC MEANS DATA=hong.df ;
VAR ALT ;
RUN;

*(경력자용) 음주 여부에 따른 기술 통계량;
PROC MEANS DATA=hong.df N MEAN STD;
CLASS ALCOHOL;
VAR ALT ;
RUN;

 

SAS 기술 통계량 정복 완료!

 

작성일: 2022.09.23.

최종 수정일: 2022.09.29.

이용 프로그램: SAS v9.4

운영체제: Windows 10

반응형

+ Recent posts