! Find Kth largest of a set.
  Given a set of values, X( I),
 Find THETA = Kth largest value in a set of values X( I).
 Also, compute sum of K largest.
   The X( I) may be variables, they need not be constants.
 Only the upper and lower bounds, XU and XL, must be known constants;
! Keywords: Median, P median, Sorting;
SETS:
  SERIES: X, XS, Z;
ENDSETS
DATA: N = 3000; ! Length of series; K = 20; ! Desired K median; SERIES = 1..N; ! Just for illustration purposes, Generate a quasi-random series with arbitrary starting seed; X = @QRAND(9387145); XL = 0; ! Lower bound for X( i); XU = 1; ! Upper bound for X( i); ENDDATA; @FOR( SERIES( I): @BIN( Z( I)); ! Z(I) = 1 if X(I) is one of K largest; ! If Z( I) = 1 then X( I) >= THETA; X( I) >= THETA - ( XU - XL)*(1- Z( I)); ! If Z( I) = 0: X( I) <= THETA; X( I) <= THETA + ( XU - XL)* Z( I); ! If want to know the sum of the X(I) >= THETA; @FREE( XS( I)); ! In case L or U < 0; ! If Z( i) = 1 then XS( I) = X( I); XS( I) >= X( I) - XU*(1 - Z( I)); XS( I) <= X( i) - XL*(1 - Z( I)); ! If Z( I) = 0 then XS( I) = 0; XS( I) <= XU* Z( I); XS( I) >= XL* Z( I); ); ! How many we can select; @SUM( SERIES( I): Z( I)) = K; ! Sum of K largest; SUMTOPK = @SUM( SERIES( I): XS( I));