想在数据集中找到一个数字的百分位数。 有多少百分比的值高于/低于某个数字? 除了目测 CDF 或 Prob Dist 图表之外,是否有现有的途径来获得这个数字,或者这是一个 JSL 任务?
您可以根据需要通过公式或 JSL 片段来执行此操作,请参见下面的屏幕截图和脚本。
公式的第一部分生成值和百分位数表,第二部分查找当前行的百分位数。

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt << New Column( "PercentileRank",
Formula(
cdf_arr = CDF( :weight << get values );
cdf_arr[2][Loc( cdf_arr[1], :weight )];
)
);
大卫:
感谢您的答复。 我熟悉分位数统计。 有了这个,我指定了分位数,JMP 正在生成与该分位数匹配的值。 我想指定值并生成分位数。 我最初的解释是不充分的。
格雷格
乔治:
谢谢您的意见。 我调整了 JSL 以匹配我的表和列名,但我猜这是一个处理器密集型计算。 已经20多分钟了,车轮还在转动。 我有大约 240K 行数据要处理。 看起来我会坚持使用我设置的 Excel 方法,直到我有时间更深入地调查这个问题。 再次感谢。
格雷格
这是一个 JMP 函数,使用 Excel 函数 PERCENTILERANK 中使用的确切方法,如 Microsoft Excel 帮助页面中所述
https://support.microsoft.com/en-us/office/percentrank-function-f1b5836c-9619-4847-9fc9-080ec9024442
下面我提供了帮助页面中的示例表,以及我创建的 JMP 函数
Names Default To Here( 1 );
New Table( "Excel Example",
Add Rows( 10 ),
New Column( "Data",
Numeric,
"Nominal",
Format( "Best", 12 ),
Set Values( [13, 12, 11, 8, 4, 3, 2, 1, 1, 1] )
)
);
dt = Current Data Table();
percentRank = Function( {col, value},{default local},
mydt = Current Data Table();
theValue = .;
theRows = mydt << get rows where( As Column( mydt, col ) == value );
If( N Rows( theRows ) > 0,
gt = Col Number( If( As Column( mydt, col )[Row()] > value, Column( mydt, col )[Row()], . ) );
lt = Col Number(
If( As Column( mydt, col )[Row()] < value & Is Missing( As Column( mydt, col )[Row()] ) == 0,
As Column( mydt, col )[Row()],
.
)
);
theValue = lt / (lt + gt);
,
lower = upper = .;
lower = Col Max( If( As Column( mydt, col ) < value & Is Missing( As Column( mydt, col )[Row()] ) == 0, Column( mydt, col )[Row()], . ) );
upper = Col Min( If( As Column( mydt, col ) > value, Column( mydt, col )[Row()], . ) );
// get the percentileRank for upper and lower
upperPR = percentRank(col,upper);
lowerPR = percentRank(col,lower);
intervalPCT=(value-lower)/(upper-lower);
theValue = lowerPR+(intervalPCT*(upperPR-lowerPR));
);
Return( theValue );
);
x = percentRank( "data", 8 ); // a data point found in the data
show("found in table",x);
x = percentRank( "data", 5 ); // a data point not found in the data
show("Not found in table",x);