Come abbinare i valori di due colonne mentre l'ordine potrebbe essere diversoSupponiamo di aver misurato due volte il difetto di un wafer e di avere i dati sugli assi X e Y per ciascun difetto.
Alcuni difetti sono difetti ripetuti, hanno dati sugli assi molto simili (anche se non esattamente gli stessi), quindi metterei per loro il tag "repeat", mentre altri difetti non hanno corrispondenza, quindi metterei per loro il tag "new".
Come posso scrivere una formula per farlo automaticamente? (ad esempio: una formula per creare automaticamente la colonna "giudica la base dopo")
(Nota che per lo stesso difetto i valori non sono esattamente gli stessi, ma molto simili. E lo stesso difetto potrebbe trovarsi in righe diverse prima e dopo)
| X-Prima |
Y-Prima |
X-Dopo |
Y-Dopo |
giudicare in base a dopo |
| -446659 |
888856 |
-446649 |
888852 |
Ripetere |
| -445908 |
630775 |
-445899 |
630772 |
Ripetere |
| -447462 |
301534 |
-446122 |
588199 |
nuovo |
| -140914 |
508425 |
-447456 |
301532 |
Ripetere |
| |
|
-140907 |
508433 |
Ripetere |
Modellazione statistica avanzataRicerca sui consumatori e di mercatoCombinazione e pulizia dei datiRi: Come abbinare i valori per due colonne mentre l'ordine potrebbe essere diversoGrazie per il chiarimento.La chiave di questo script è la comprensione della funzione
dt << ottieni righe where()
E poi scorrere tutte le righe che hanno valori Before X e Y validi.
Names Default To Here( 1 );
dt = Current Data Table();
xFudge = Abs( Min( Col Min( :"x-before"n ), Col Min( :"x-after"n ) ) );
yFudge = Abs( Min( Col Min( :"y-before"n ), Col Min( :"y-after"n ) ) );
dt << New Column( "Repeat_New", character, set each value( "New" ) );
For( i = 1, i <= N Rows( dt ), i++,
If( Is Missing( :"x-before"n[i] + :"y-before"n[i] ) == 0,
Try(
:Repeat_New[dt << get rows where(
Sqrt(
((xFudge + :"x-before"n[i]) - (xFudge + :"x-after"n)) ^ 2 + ((yFudge
+:"y-before"n[i]) - (yFudge + :"y-after"n)) ^ 2
) < 100 & Row() >= i
)] = "Repeat"
)
)
);
Data la tua stima di quante righe può avere la tua tabella di dati, puoi aspettarti che lo script richieda una notevole quantità di tempo per l'elaborazione.
Il mio utilizzo di <= 100 unità come distanza considerata lo stesso difetto, è solo una mia ipotesi.Non ho un vero modo per impostare quel valore, dato che non conosco la risoluzione dello strumento di misurazione dei difetti e la tua capacità di risoluzione stepper.Ma dovresti essere in grado di stimare la variabilità dell'utensile e da quella impostazione le unità di distanza.
Ri: Come abbinare i valori per due colonne mentre l'ordine potrebbe essere diversoCiao Txnelson,
Grazie per la risposta, ho provato il tuo metodo. Tuttavia, c'è un problema.
Sembra che tu confronti i dati solo nella stessa riga.
La situazione reale è:
Per prima, potevano esserci 500 difetti, cioè 500 righe. Per dopo, potrebbero esserci 1000 righe.
Lo stesso difetto può trovarsi nella riga 50 # nella colonna prima e nella riga 121 nella colonna successiva, non lo saprai.
Quindi è necessario confrontare tutte le 1000 righe di dopo, con tutte le 500 righe di prima per abbinare ogni difetto ripetuto.
Il risultato della partita potrebbe essere: 490 su 500 potrebbero trovare una corrispondenza, 10 mancavano e gli altri 500 sono nuovi sommatori
Ri: Come abbinare i valori per due colonne mentre l'ordine potrebbe essere diversoEcco un approccio.I determina la differenza tra i due punti, quindi applica la logica Nuovo/Ripeti alla differenza.Credo che tu abbia un errore nella tabella dei dati, che compare nel nuovo calcolo
Names Default To Here( 1 );
dt = Current Data Table();
xFudge = Abs( Min( Col Min( :"x-before"n ), Col Min( :"x-after"n ) ) );
yFudge = Abs( Min( Col Min( :"y-before"n ), Col Min( :"y-after"n ) ) );
//dt << New Column( "diff" );
dt << New Column( "Repeat_New", character );
For Each Row(
diff = Sqrt(
((xFudge + :"x-before"n) - (xFudge + :"x-after"n)) ^ 2 + ((yFudge + :"y-before"n) - (yFudge +
:"y-after"n)) ^ 2
);
If( diff < 100 | isMissing(diff)
,
:Repeat_New = "Repeat";
,
:Repeat_New = "New"
);
);