Aquí hay un intento de fuerza bruta. El rendimiento fue instantáneo para 1000 filas xy, 17 segundos para 100,000 filas xy y 159 segundos para 1 millón de filas xy. Puede obtener una aceleración utilizando la función "en polígono".
// Pequeña tabla de valores XY
xydt = Nueva mesa ( "datos xy" , Añadir filas ( 10 ) ,
Nueva Columna ( "X" , Numérico , Continuo , Formato ( "Mejor" , 12 ) ,
Valores establecidos (
El 0.206704897573218 , 0.188453091308474 , 0.402824054239318 ,
0.946105436887592 , 0.209207338048145 , 0.783533588517457 ,
0.15626378194429 , 0.293116413988173 , 0.0382238682359457 ,
0.0646856701932847 ] ) ) ,
Nueva Columna ( "y" , Numérico , Continuo , Formato ( "Mejor" , 12 ) ,
Valores establecidos (
El 0.258698139106855 , 0.395224047359079 , 0.0813549624290317 ,
0.158546321559697 , 0.874619059031829 , 0.787837725598365 ,
0.173847715603188 , 0.736063659423962 , 0.782933217706159 ,
0.28023144742474 ] ) ) ,
Nueva Columna ( "Caja" , Personaje , Nominal )
) ;
// Tabla de coordenadas inferior izquierda y superior derecha
refdt = Nueva mesa ( "Caja de referencia" , Añadir filas ( 26 ) ,
Nueva Columna ( "xll" , Numérico , Continuo , Formato ( "Mejor" , 12 ) ,
Valores establecidos (
El 0 , 0 , 0 , 0 , 0 , 0.2 , 0.2 , 0.2 , 0.2 , 0.2 , 0.4 , 0.4 , 0.4 , 0.4 , 0.4 , 0.4 ,
0.6 , 0.6 , 0.6 , 0.8 , 0.8 , 0.8 , 0.9 , 0.9 , 0.9 , 0.9 ] ) ) ,
Nueva Columna ( "yll" , Numérico , Continuo , Formato ( "Mejor" , 12 ) ,
Valores establecidos (
El 0 , 0.2 , 0.4 , 0.6 , 0.8 , 0.1 , 0.3 , 0.5 , 0.7 , 0.9 , 0.1 , 0.3 , 0.5 , 0.7 , 0.8 ,
0.9 , 0.2 , 0.4 , 0.6 , 0.2 , 0.4 , 0.6 , 0.3 , 0.5 , 0.7 , 0.9 ] ) ) ,
Nueva Columna ( "xur" , Numérico , Continuo , Formato ( "Mejor" , 12 ) ,
Valores establecidos (
El 0.2 , 0.2 , 0.2 , 0.2 , 0.2 , 0.4 , 0.4 , 0.4 , 0.4 , 0.4 , 0.6 , 0.6 , 0.6 , 0.6 ,
0.6 , 0.6 , 0.8 , 0.8 , 0.8 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ] ) ) ,
Nueva Columna ( "yur" , Numérico , Continuo , Formato ( "Mejor" , 12 ) ,
Valores establecidos (
El 0.2 , 0.4 , 0.6 , 0.8 , 1 , 0.3 , 0.5 , 0.7 , 0.9 , 1 , 0.2 , 0.4 , 0.6 , 0.8 , 0.9 ,
1 , 0.4 , 0.6 , 0.8 , 0.4 , 0.6 , 0.8 , 0.5 , 0.7 , 0.9 , 1 ] ) ) ,
Nueva Columna ( "Caja" , Personaje , Nominal ,
Valores establecidos (
{ "UNA" , "SEGUNDO" , "DO" , "RE" , "MI" , "F" , "SOL" , "H" , "YO" , "J" , "K" , "L" , "METRO" , "NORTE" ,
"O" , "PAG" , "Q" , "R" , "S" , "T" , "U" , "V" , "W" , "X" , "Y" , "Z" } ) )
) ;
start_dt = hoy () ;
para ( yo = 1 , yo <= nows ( xydt ) , yo ++,
xval = xydt : X El yo ] ;
yval = xydt : y El yo ] ;
ref_list = refdt << obtener filas donde ( : xll <= xval Y : yll <= yval Y
xval < : xur Y yval < : yur ) ;
// A ver si encontramos una coincidencia
Si ( nows ( ref_list ) > 0 ,
match_row = ref_list El 1 ] ; // toma el primero; ¡Sólo debería ser uno!
xydt : caja El yo ] = refdt : caja El match_row ] ;
) ;
) ;
end_dt = hoy () ;
transcurrido = end_dt - start_dt ;
impresión ( transcurrido ) ;
He adjuntado un script que busca en una tabla de búsqueda y realiza acciones en una tabla principal.
perdón por el archivo adjunto, en lugar de tenerlo como texto ... pero por alguna razón, esta ventana no me permite pegarla.
Después de reiniciar, pude cortar y pegar 
Nombres predeterminados aquí ( 1 ) ;
dt = Abierto ( "$ SAMPLE_DATA \ Semiconductor Capability.jmp" ) ;
buscar = dt << Resumen (
Grupo( : lot_id , : oblea) ,
Media ( : NPN1) ,
Mediana( : NPN1) ,
Freq ( "Ninguna" ) ,
Peso( "Ninguna" ) ,
formato de nombre de columna de estadísticas ( "columna stat" ) ,
Enlace a la tabla de datos original ( 0 )
) ;
dt << Nueva Columna ( "Media" ) ;
dt << Nueva Columna ( "Mediana" ) ;
por ( yo = 1 , yo <= N filas (dt) , yo ++,
lookuprow = (buscar << obtener filas donde ( buscar : lot_id == dt : lot_id
Y buscar : oblea == dt : oblea )) [ 1 ] ;
dt : Media = buscar : NPN1 significa [lookuprow] ;
dt : Mediana = buscar : Mediana NPN1 [lookuprow] ;
) ;