从数字列计算百分位数列

Calculate percentile column from a numeric column

我正在尝试创建一个名为 percentile_Idle_Time 的计算列(我正在尝试计算每个值的百分位数)。该列是 idle_time% 列的百分位值。

所以,输入数据是

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

所以,我正在尝试创建一个名为 percentile_Idle_Time 的新列,它只是空闲时间百分比值

的百分位数位置

所以,输出数据应该是这样的

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;

但是它不起作用。另一个挑战是从 % 列中获取百分位数分数

那就手动做吧。对数据进行升序排序并使用 NOBS 获取观察值的数量。用n除以NOBS得到总值

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;

编辑:修复了数据步骤中的引用并排序以对齐。