想要在數據集中找到數字的百分位數。 有多少百分比的值高於/低於某個數字? 除了關注 CDF 或 Prob Dist 圖表之外,是否有現有的途徑來獲取這個數字,或者這是一個 JSL 任務?
吉姆:
感謝您提供的編碼示例。 在我努力提高我的 JSL 技能時,這些類型的示例是很好的教程。 我再次感謝您的意見。
格雷格
你好@WoHNY ,
雖然其他人提供了出色的解決方案,但讓我提供一個更基本的解決方案。試試下面的腳本,它在一台普通的電腦上對我來說足夠快了。
Names Default To Here( 1 );
dt = New Table( "rank percentile - example",
New Column( "X", Numeric, "Continuous", Formula( Random Normal( 20, 5 ) ), Set Selected ),
New Column( "rank percentile", Numeric, "Continuous", Format( "Percent", 12, 0 ), Formula( Col Rank( :X ) / Col Number( :X ) ) )
);
dt << Add Rows( 1000000000 );
羅恩
這是一個使用 Excel 函數中使用的精確方法的 JMP 函數,如 MicroSoft Excel 幫助頁面中所述,PERCENTILERANK
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);喬治:
謝謝您的意見。 我調整了 JSL 以匹配我的表名和列名,但我猜這是一個處理器密集型計算。 已經過去了 20 多分鐘,車輪還在轉動。 我有大約 240K 行數據要處理。 看起來我會堅持使用我設置的 Excel 方法,直到我有時間更深入地調查這個問題。 再次感謝。
格雷格
大衛:
感謝您的答复。 我熟悉分位數統計。 有了這個,我指定了分位數,JMP 正在生成與該分位數相匹配的值。 我想指定值並生成分位數。 我最初的解釋是不夠的。
格雷格
您可以根據需要通過公式或 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 )];
)
);