Ecco un tentativo di forza bruta. Le prestazioni erano istantanee per 1000 xy righe, 17 secondi per 100.000 xy righe e 159 secondi per 1 milione di righe xy. Potrebbe ottenere una velocità utilizzando la funzione "in poligono".
// Piccola tabella di valori XY
xydt = Nuova tabella ( "xy data" , Aggiungi righe ( 10 ) ,
Nuova colonna ( "X" , Numerico , Continuo , Formato ( "Migliore" , 12 ) ,
Imposta valori (
[ 0,206704897573218 , 0,188453091308474 , 0,402824054239318 ,
0,946105436887592 , 0,209207338048145 , 0,783533588517457 ,
,15626378194429 , 0,293116413988173 , ,0382238682359457 ,
,0646856701932847 ] ) ) ,
Nuova colonna ( "Y" , Numerico , Continuo , Formato ( "Migliore" , 12 ) ,
Imposta valori (
[ 0,258698139106855 , 0,395224047359079 , ,0813549624290317 ,
0,158546321559697 , 0,874619059031829 , 0,787837725598365 ,
0,173847715603188 , 0,736063659423962 , 0,782933217706159 ,
,28023144742474 ] ) ) ,
Nuova colonna ( "Scatola" , Personaggio , Nominale )
) ;
// Tabella delle coordinate in basso a sinistra e in alto a destra
refdt = Nuova tabella ( "Box Reference" , Aggiungi righe ( 26 ) ,
Nuova colonna ( "XLL" , Numerico , Continuo , Formato ( "Migliore" , 12 ) ,
Imposta valori (
[ 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 ] ) ) ,
Nuova colonna ( "Yll" , Numerico , Continuo , Formato ( "Migliore" , 12 ) ,
Imposta valori (
[ 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 ] ) ) ,
Nuova colonna ( "Xur" , Numerico , Continuo , Formato ( "Migliore" , 12 ) ,
Imposta valori (
[ 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 ] ) ) ,
Nuova colonna ( "Yur" , Numerico , Continuo , Formato ( "Migliore" , 12 ) ,
Imposta valori (
[ 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 ] ) ) ,
Nuova colonna ( "Scatola" , Personaggio , Nominale ,
Imposta valori (
{ "UN" , "B" , "C" , "D" , "E" , "F" , "G" , "H" , "IO" , "J" , "K" , "L" , "M" , "N" ,
"O" , "P" , "Q" , "R" , "S" , "T" , "U" , "V" , "W" , "X" , "Y" , "Z" } ) )
) ;
start_dt = oggi () ;
per ( io = 1 , io <= nrows ( xydt ) , io ++,
xval = xydt : X [ io ] ;
yval = xydt : y [ io ] ;
ref_list = refdt << ottenere righe dove ( : XLL <= xval & : YLL <= yval &
xval < : xur & yval < : yur ) ;
// Vedi se abbiamo trovato una corrispondenza
Se ( nrows ( ref_list ) > 0 ,
match_row = ref_list [ 1 ] ; // prendi il primo; dovrebbe essere solo uno!
xydt : scatola [ io ] = refdt : scatola [ match_row ] ;
) ;
) ;
end_dt = oggi () ;
trascorso = end_dt - start_dt ;
stampare ( trascorso ) ;
Ho allegato uno script che cerca da una tabella di ricerca e agisce su una tabella principale.
mi dispiace per l'allegato, piuttosto che averlo come testo ... ma per qualche ragione, questa finestra non mi permetterà di incollarlo.
Dopo un riavvio, sono stato in grado di tagliare e incollare 
Nomi predefiniti qui ( 1 ) ;
dt = Aperto ( "$ SAMPLE_DATA \ Semiconductor Capability.jmp" ) ;
consultare = dt << Sommario (
Gruppo( : LOT_ID , : wafer) ,
Significare ( : NPN1) ,
Mediano( : NPN1) ,
Freq ( "Nessuna" ) ,
Peso( "Nessuna" ) ,
formato nome colonna statistiche ( "stat colonna" ) ,
Collegamento alla tabella dati originale ( 0 )
) ;
dt << Nuova colonna ( "Significare" ) ;
dt << Nuova colonna ( "Mediano" ) ;
Per ( io = 1 , io <= N righe (dt) , io ++,
lookupRow = (consultare << ottenere righe dove ( consultare : LOT_ID == dt : LOT_ID
& consultare : wafer == dt : wafer )) [ 1 ] ;
dt : Significare = consultare : Media NPN1 [lookupRow] ;
dt : Mediano = consultare : NPN1 Mediano [lookupRow] ;
) ;