데이터 세트 내에서 숫자의 백분위수를 찾고 싶습니다. 특정 숫자보다 높거나 낮은 값의 백분율은 무엇입니까? CDF 또는 Prob Dist 차트를 관찰하는 것 외에 이 수치를 얻을 수 있는 기존 경로가 있습니까? 아니면 이것이 JSL 작업입니까?
Tabulate 플랫폼(Analyze>Tabulate) 내에서 Quantiles 통계를 사용할 수 있습니다.
원하는 대로 수식이나 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 )];
)
);
데이비드:
응답해 주셔서 감사합니다. 나는 Quantile 통계에 대해 잘 알고 있었습니다. 이를 통해 저는 Quantile을 지정하고 JMP는 해당 Quantile과 일치하는 값을 생성합니다. 값을 지정하고 Quantile을 생성하고 싶습니다. 나의 초기 설명이 부족했다.
그렉
게오르크:
입력해 주셔서 감사합니다. 내 테이블 및 열 이름과 일치하도록 JSL을 조정했지만 이것은 매우 프로세서 집약적인 계산이라고 생각합니다. 20분이 넘었는데 아직도 바퀴가 돌아가고 있습니다. 처리해야 할 데이터 행이 약 240K입니다. 이 문제를 더 깊이 조사할 시간을 찾을 때까지 설정한 Excel 방법을 계속 사용할 것 같습니다. 다시 한번 감사합니다.
그렉
다음은 MicroSoft Excel 도움말 페이지에 설명된 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);