Voici une tentative de force brute. Les performances étaient instantanées pour 1 000 lignes xy, 17 secondes pour 100 000 lignes xy et 159 secondes pour 1 million de lignes xy. Peut-être une accélération en utilisant la fonction "in polygon".
// Petit tableau de valeurs XY
xydt = Nouvelle table ( "données xy" , Ajouter des lignes ( dix ) ,
Nouvelle colonne ( "X" , Numérique , Continu , Format ( "Meilleur" , 12 ) ,
Définir des valeurs (
[ 0.206704897573218 , 0.188453091308474 , 0.402824054239318 ,
0,946105436887592 , 0.209207338048145 , 0.783533588517457 ,
0.15626378194429 , 0.293116413988173 , 0.0382238682359457 ,
0.0646856701932847 ] ) ) ,
Nouvelle colonne ( "y" , Numérique , Continu , Format ( "Meilleur" , 12 ) ,
Définir des valeurs (
[ 0.258698139106855 , 0.395224047359079 , 0.0813549624290317 ,
0.158546321559697 , 0.874619059031829 , 0,787837725598365 ,
0.173847715603188 , 0.736063659423962 , 0.782933217706159 ,
0.28023144742474 ] ) ) ,
Nouvelle colonne ( "Boîte" , Personnage , Nominal )
) ;
// Tableau des coordonnées en bas à gauche et en haut à droite
refdt = Nouvelle table ( "Référence de la boîte" , Ajouter des lignes ( 26 ) ,
Nouvelle colonne ( "xll" , Numérique , Continu , Format ( "Meilleur" , 12 ) ,
Définir des valeurs (
[ 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 ] ) ) ,
Nouvelle colonne ( "yll" , Numérique , Continu , Format ( "Meilleur" , 12 ) ,
Définir des valeurs (
[ 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 ] ) ) ,
Nouvelle colonne ( "xur" , Numérique , Continu , Format ( "Meilleur" , 12 ) ,
Définir des valeurs (
[ 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 ] ) ) ,
Nouvelle colonne ( "votre" , Numérique , Continu , Format ( "Meilleur" , 12 ) ,
Définir des valeurs (
[ 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 ] ) ) ,
Nouvelle colonne ( "Boîte" , Personnage , Nominal ,
Définir des valeurs (
{ "UNE" , "B" , "C" , "RÉ" , "E" , "F" , "G" , "H" , "JE" , "J" , "K" , "L" , "M" , "N" ,
"O" , "P" , "Q" , "R" , "S" , "T" , "U" , "V" , "W" , "X" , "Y" , "Z" } ) )
) ;
start_dt = aujourd'hui () ;
pour ( je = 1 , je <= maintenant ( xydt ) , je ++,
xval = xydt : X [ je ] ;
yval = xydt : y [ je ] ;
ref_list = refdt << obtenir des rangées où ( : xll <= xval Et : yll <= yval Et
xval < : xur Et yval < : vous ) ;
// Voir si nous avons trouvé une correspondance
si ( maintenant ( ref_list ) > 0 ,
match_row = ref_list [ 1 ] ; // prend le premier; ne devrait être qu'un!
xydt : boîte [ je ] = refdt : boîte [ match_row ] ;
) ;
) ;
end_dt = aujourd'hui () ;
écoulé = end_dt - start_dt ;
impression ( écoulé ) ;
J'ai joint un script qui lève les yeux d'une table de recherche et agit sur une table principale.
désolé pour la pièce jointe, plutôt que de l'avoir sous forme de texte ... mais pour une raison quelconque, cette fenêtre ne me laissera pas y coller.
Après un redémarrage, j'ai pu couper et coller 
Noms par défaut jusqu'ici ( 1 ) ;
dt = Ouvrir ( "$ SAMPLE_DATA \ Semiconductor Capability.jmp" ) ;
Chercher = dt << Résumé (
Groupe( : lot_id , : plaquette) ,
Signifier ( : NPN1) ,
Médian( : NPN1) ,
Freq ( "Aucun" ) ,
Poids( "Aucun" ) ,
format de nom de colonne de statistiques ( "stat colonne" ) ,
Lien vers la table de données d'origine ( 0 )
) ;
dt << Nouvelle colonne ( "Signifier" ) ;
dt << Nouvelle colonne ( "Médian" ) ;
Pour ( je = 1 , je <= N lignes (dt) , je ++,
lookupRow = (Chercher << obtenir des rangées où ( Chercher : lot_id == dt : lot_id
Et Chercher : tranche == dt : tranche )) [ 1 ] ;
dt : Signifier = Chercher : NPN1 Moyenne [lookupRow] ;
dt : Médian = Chercher : Médiane NPN1 [lookupRow] ;
) ;