我正在尝试创建一个名为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;
但它不起作用。另一个挑战是从%列中获取百分位数
答案 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;
编辑:修复数据步骤中的引用并排序以对齐。