본문 바로가기
의학통계/SAS Tip

Proc Rank 를 이용한 SAS 순위 정하기

by boogler 2022. 6. 23.
반응형

Proc Rank 를 이용한 SAS 순위 정하기

 

데이터의 순위를 정해서 동일한 데이터셋에 새로운 순위 변수를 만드는 방법을 Proc Rank 를 이용하여 해보겠습니다.  전체 순위를 매기는 것 뿐만아니라 특정 그룹내에서 그룹내 순위매기기 또는 median 기준으로 2개 그룹나누기, Tertile, Quartile, Quintile 등 여러용도로 사용할 수 있는 유용한 SAS Procedure입니다.


< Sample data 생성 >

 

data test_data;
   input subject $ gender $ bmi;
   datalines;
A01 M 25.2
A02 F 23.4
A03 F 24.1
A04 M 24.5
A05 M 27.4
A06 M 27.1
A07 F 22.1
A08 F 25.1
A09 F 24.7
A10 F 23.1
A11 M 23.7
A12 M 28.3
;

run;

 

< Sample data 형태 >

Rank Sample 데이터

 

1. 전체 순위 생성하기
proc rank data=test_data out=test_data ties=low;
var bmi;
ranks rank_bmi
proc sort data=test_data;by rank_bmi;
proc print data=test_data;run;

* ties=low 는 동일한 값이 있을때 그 순위 중 작은 값을, ties=high는 큰값, ties=mean은 평균값을 지정합니다.
* ranks 뒤의 변수명으로 순위값이 저장됩니다.
* ascending 이 default 이고, descending는 큰값부터 작은값 순서로 순위가 매겨집니다.

 

< SAS Output >

Proc Rank Output (ties option 구분)

 

2. 그룹내에서 순위 생성하기

 

그룹내 순위를 생성하기 위해서는 먼저 그룹(예제에서 gender)으로 정렬이 되어 있어야합니다.

proc sort data=test_data;by gender;

proc rank data=test_data out=test_data ties=low;
by gender;
var bmi;
ranks rank_bmi;

proc sort data=test_data;by gender rank_bmi;
proc print data=test_data;run;

* by 절 뒤에 정렬의 기준이 될 그룹변수를 적습니다.

 

< SAS Output >

Proc Rank 그룹내 순위 Output

 

3. N개의 그룹으로 순위를 나누기
proc rank data=test_data out=test_data groups=3;
var bmi;
ranks rank_bmi;

proc sort data=test_data;by rank_bmi;
proc print data=test_data;run;

* groups=n 에 나눌 그룹의 갯수를 적습니다.
* groups=n 을 이용하여 3분위, 4분위, 5분위 ....10분위를 기준으로 순위 나누기를 할 수있습니다.

 

< SAS Output >

3개 그룹으로 순위정하기

 

댓글