从数字列计算百分位数列
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;
编辑:修复了数据步骤中的引用并排序以对齐。
我正在尝试创建一个名为 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;
编辑:修复了数据步骤中的引用并排序以对齐。