データセット内の数値のパーセンタイルを検索したい。 値の何パーセントが特定の数値より上/下ですか? CDFまたはProbDistチャートを目で確認する以外に、この数値を取得するための既存のパスはありますか、それともこれはJSLタスクですか?
表形式プラットフォーム内で分位数統計を使用できます([分析]> [表形式])。
これは、必要に応じて数式またはJSLスニペットで実行できます。以下のスクリーンショットとスクリプトを参照してください。
式の最初の部分は値とパーセンタイルのテーブルを生成し、2番目の部分は現在の行のパーセンタイルを検索します。

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 )];
)
);
David:
ご返信ありがとうございます。 私は分位数の統計に精通していました。 これでQuantileを指定し、JMPはそのQuantileに一致する値を生成しています。 値を指定して分位数を生成したいと思います。 私の最初の説明は不十分でした。
グレッグ
ゲオルク:
ご意見ありがとうございます。 テーブルと列の名前に一致するようにJSLを調整しましたが、これは非常にプロセッサを集中的に使用する計算だと思います。 20分以上経過しましたが、ホイールはまだ回転しています。 処理するデータは約24万行あります。 この問題をより深く調査する時間が見つかるまで、設定したExcelメソッドを使い続けるようです。 再度、感謝します。
グレッグ
これは、MicroSoftExcelヘルプページで説明されているExcel関数PERCENTILERANKで使用されている正確な方法を使用したJMP関数です。
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);