Come filtrare gli ID duplicati lasciando solo l'ultimo duplicato?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao a tutti,
Spero che ci sia una soluzione JSL in cui posso semplicemente usare un ' < ' messaggio al datatable. Ho un datatable di dati in cui ogni riga rappresenta un dispositivo testato.
Ci sono 2 colonne numeriche che specificano un identificatore univoco per ogni riga, cioè una colonna 'ID' e una colonna 'wafer number'. Ci sono anche altre 2 colonne che specificano data e ora rispettosamente. Il problema è che a volte i dispositivi vengono testati nuovamente all'interno dello stesso set di dati, il che porta a valori duplicati per le colonne ID e wafer. Mi piacerebbe poter selezionare tutti gli ID univoci e, nel caso di ID duplicati, assicurarmi che sia selezionato solo l'ultimo valore (per numero di riga o timestamp).
Di seguito è riportato un datatable di esempio che mostra ciò che sto cercando. Le due parti che sono state testate nuovamente (evidenziate qui in rosso, le ripetizioni corrispondenti sono in verde) vengono escluse e tutto il resto viene selezionato.
Qualsiasi aiuto con questo sarebbe molto apprezzato.
Grazie.

Ri: Come filtrare gli ID duplicati lasciando solo l'ultimo duplicato?Ciao nkelleh,
quando ho detto "ordinerei la tabella per ID, WaferNum, data e ora (in quest'ordine)", intendevo
Current Data Table() << Sort(By(:ID, :WaferNum, :Date, :Time), Order(Ascending));
Ho il forte sospetto che eseguire diversi Sort (una singola colonna come argomento per ciascuno) uno dopo l'altro, come hai fatto tu, non darà gli stessi risultati dell'esecuzione di un singolo Sort con più colonne come argomenti.
Spero che questo ti aiuti
Ri: Come filtrare gli ID duplicati lasciando solo l'ultimo duplicato?Ciao a tutti,
Grazie mille per tutto il tuo aiuto.
Jeff, il tuo approccio avrebbe funzionato benissimo per me, tranne per il fatto che su un ulteriore esame dei dati, risulta che c'erano duplicati con gli stessi valori di data e ora (mi scuso, questo non è stato mostrato nell'esempio).
Alla fine, ho accettato il suggerimento di jvillaumie. Di seguito è la mia implementazione.
mydt = Current Data Table();
//Sort columns by ID, wafer num, date in that order
mydt << Sort( Replace Table, By(:ID), Order(Ascending));
mydt << Sort( Replace Table, By(:WaferNum), Order(Ascending));
mydt << Sort( Replace Table, By(:Date), Order(Ascending));
//Select duplicates, i.e. if the next row has the same values for ID and waferNum as the current row, i.e. everything but the last duplicate
mydt << Select Where(
:ID == :ID[Row() + 1] & :WaferNum == :WaferNum[Row() + 1]
);
//Delete Selection
mydt <<DeleteRows;
Ri: Come filtrare gli ID duplicati lasciando solo l'ultimo duplicato?Come molte cose con JMP, ci sono diversi modi per ottenere questo risultato.
La prima cosa da notare è che il colonna massima() funzione avrà facoltativo PerVariabile argomenti.

Quindi, penso che tu possa usarlo per costruire la tua condizione per selezionare le righe:
(:Date ==Col Maximum(:Date,:ID,:WaferNum ))&(:Time ==
Col Maximum(:Time,:ID,:WaferNum,:Date ));
- Jeff
Ri: Come filtrare gli ID duplicati lasciando solo l'ultimo duplicato?Vorrei ordinare la tabella per ID, WaferNum, data e ora (in quest'ordine), in modo che le righe con lo stesso ID e WaferNum si seguano nella tabella, con le più vecchie sopra le più recenti.
Vorrei quindi creare una nuova colonna chiamata "Duplica", con questa formula (dovresti essere in grado di copiarla direttamente e incollarla in JMP):
If( :ID == :ID[Row() + 1, Empty()] & :WaferNum == :WaferNum[Row() + 1, Empty()],
1,
0
)
Contrassegnerà le righe seguite da un'altra riga con lo stesso ID e WaferNum (ovvero repliche che non sono le più recenti) con un "1".
Usa SelectWhere Duplicato == 0.
Ri: Come filtrare gli ID duplicati lasciando solo l'ultimo duplicato?dai un'occhiata a queste discussioni:
Ri: Sintassi: come creo una colonna indice per ID
Formula JMP: Classifica per gruppo
una volta stabilita la classifica puoi filtrare.
Ron
Ri: Come filtrare gli ID duplicati lasciando solo l'ultimo duplicato?Grazie per questo. Ho visto un esempio di questo va bene, ma speravo che ci fosse un modo per farlo specificando una condizione all'interno del messaggio << Select Where () al datatable. Ho la sensazione che dovrebbe essere possibile, ma non sono sicuro di come lo faresti.
Inoltre, un'altra considerazione è che all'interno di un batch di prova, la data e l'ora non cambiano, il che significa che avrai ancora duplicati in cui l'unica differenza è nel numero di riga quando limitato alle colonne che ho specificato. Complimenti in ogni caso.
Ri: Come filtrare gli ID duplicati lasciando solo l'ultimo duplicato?un'opzione potrebbe essere quella di creare una colonna per data e ora (concatenazione) . questo permetterà di utilizzare la tabella riassuntiva per ID e WaferNum e richiedendo il valore Max di data e ora. questo produrrà un nuovo tavolo pulito per te.
Ron