从数字列计算百分位数列

时间:2017-12-08 16:46:18

标签: sas proc-sql enterprise-guide

我正在尝试创建一个名为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;

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

1 个答案:

答案 0 :(得分:1)

然后手动执行。对数据进行排序并使用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;

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