2017-12-08 18 views
0

percentile_Idle_Time이라는 계산 된 열을 만들려고합니다 (모든 값에 대해 백분위 수를 계산하려고합니다). 열은 idle_time % 열의 백분위 값입니다.숫자 열의 백분위 열 계산

따라서, 입력 데이터는 내가

그래서 유휴 시간 % 값의 백분위 위치에 불과하다 percentile_Idle_Time라는 새 열을 만들려고하고, 그래서

Total Time Idle Time Idle Time %  
5:10:00  0:14:00  4.6% 
3:09:00  0:20:00  9.49% 
    .    .   . 
    .    .   . 

이며, 출력 숫자는 (정확하지 않음) 꽤 거칠다 나는

를 사용하여 시도 : 데이터

Total Time Idle Time Idle Time % percentile_Idle_Time 
5:10:00  0:14:00  4.6%    75.4 
3:09:00  0:20:00  9.49%   97.9 
    .    .   .    . 
    .    .   .    . 

주 같아야합니다

proc univariate data=WORK.QUERY_FOR_PEOPLENET_DATA_00_0000 noprint; 
by DriverId; 
var 'Short Idle Time %'n; 
output pctlpre=P_ ; 
run; 

하지만 작동하지 않습니다. 다른 과제는 % 열에서 백분위 점수를 얻는 것입니다.

답변

1

수동으로 수행하십시오. 데이터를 오름차순으로 정렬하고 NOBS를 사용하여 관측 수를 얻습니다. 총 값을 얻기 위해 NOBS로 나눌 때는 n을 사용하십시오.

proc sort data=sashelp.class out=class; 
by weight; 
run; 


data want; 
    set class Nobs=myobs; 

    percentile = _n_/myobs; 
run; 

이 점은 넥타이를 다루지 않음에 유의하십시오. 처리해야 할 동점이 있으면 대신 PROC RANK를 사용하십시오. 나는 보통 100 명의 그룹과 함께 그것을한다. 그러면 당신은 1에서 100 개의 그룹을 얻을 것이다. 그러나 그것이 당신이 찾고있는 것이라면 96.5 퍼센트입니다.

proc rank data=sashelp.class out=ranked_class groups=100; 
var weight; 
ranks weight_percentile; 
run; 

편집 : 데이터 단계의 고정 참조 및 정렬 정렬.

+1

아마도 이것은 'PROC RANK'을 두 번째 솔루션이 아닌 첫 번째 솔루션으로 사용합니다 ('PROC RANK '가 좋음). 또한 10k에 Congrats, Reeza, 삭제 된 소식을 볼 수있게 된 것을 환영합니다! – Joe

+0

또한 PROC RANK 솔루션을 선호하지만 OP에는 샘플이 75.4 %이므로 첫 번째 옵션이 필요할 수 있습니다. – Reeza

+0

예, proc rank가 완벽하게 작동합니다. –