Selezione e rimozione della riga duplicata con condizioneCiao ragazzi,
Ho cercato nel forum ma non mi sono avvicinato a ciò che volevo ottenere, o forse mi sono perso.

Ad ogni modo, ho bisogno di aiuto per la tabella qui sopra. Come puoi vedere, ho duplicati come evidenziato dal colore. Il numero di serie è lo stesso per la maggior parte perché la parte viene ispezionata in sezioni diverse (come mostrato 1A,1B,2A,2B,3A,3B,4A,4B). Di solito, se la parte non supera l'ispezione, verrà nuovamente ispezionata, come mostrato nella colonna del nuovo test (0 per nessun nuovo test, 1 per il primo, ecc.). Ora posso differenziare la parte solo in base al numero di nuovi test o alla data all'interno dello stesso numero di serie, quindi vorrei conservare il risultato dell'ultimo nuovo test ed eliminare i duplicati del precedente. Ciò significa che, come da casella evidenziata sopra, per il blu o il rosso, voglio mantenere il re-test 1 e rimuovere il re-test 0. Questo è un po' un grattacapo per me, quindi avrei bisogno del consiglio della community sullo script per selezionare la condizione all'interno del numero di serie e della sezione per capire l'ultimo nuovo test, quindi conservare l'ultimo nuovo test e rimuovere i duplicati precedenti. Spero che tutti voi abbiate qualche input in merito. Grazie
Ri: Selezione e rimozione della riga duplicata con condizioneSe desideri rimuovere le righe duplicate corrispondenti a tutte le colonne tranne una (o alcune), questa è la mia soluzione funzionante.
Il vantaggio è che non è necessario specificare il nome di ogni colonna.
// delete duplicate rows, where only column ID is different
column_list = dtProcess << Get Column Names( string );
Remove From( column_list, As List( Loc( column_list, "ID" ) ) ); // remove "ID"
dtProcess << Select Duplicate Rows( Match(As List(column_list)));
doublerows = dtProcess << get selected rows;
num_selected = n rows(doublerows);
if(num_selected >0,
dtProcess << delete rows;
print("Removed " || char(num_selected) || " rows from process table.")
,
print("No duplicate rows in process table, excluding column ID.")
);:
Ri: Selezione e rimozione della riga duplicata con condizioneGrande aiuto! Grazie!
Stavo costruendo qualcosa del genere, in qualche modo la mia combinazione è sbagliata nella selezione delle colonne.
Grazie!
Ri: Selezione e rimozione della riga duplicata con condizioneHo apportato alcune modifiche per adattarle al mio tavolo. Grazie!
Ri: Selezione e rimozione della riga duplicata con condizioneSe disponi di una versione precedente di JMP, < potrebbe non essere disponibile. Quindi prova l'approccio seguente. Il codice deve selezionare ed eliminare le righe duplicate (in base alla corrispondenza di SerialNo e Sezione) con la prima data. L'ordinamento non ha importanza.
dt = Current Data Table();
dt << select where(Col Max(:Date, :SerialNo, :Section) > :Date());
dt << delete rows();
Ri: Selezione e rimozione della riga duplicata con condizioneC'è una funzione chiamata
Seleziona righe duplicate()
che può essere utilizzato per questo, tuttavia si basa sulla ricerca di righe che seguono una riga univoca.Pertanto, la tabella deve essere ordinata al contrario prima di utilizzare la funzione.Di seguito è riportato uno script di esempio per eseguire questa operazione.Poiché non avevo una tabella dati di esempio su cui eseguirlo, lo script non è stato testato, tuttavia è molto vicino a essere ciò di cui hai bisogno.
La documentazione sulla funzione può essere trovata nello Scripting Index
Names Default To Here( 1 );
dt = Current Data Table();
// Add a new column to preserve the current order
dt << New Column( "rowNum", formula( Row() ) );
// Remove the formula to convert values to static values
:rowNum << delete property( "formula" );
// Sort the data table in referse order, since one wants to
// keep the most recent value
dt << sort( by( rowNum ), order( descending ), Replace Table( 1 ) );
// Find the duplicate rows
dt << Select Duplicate Rows( Match( :SerialNo, :Date, :Retest ) );
// Delete Duplicates
dt << delete rows;
// Reorder the table
dt << sort( by( rowNum ), order( ascending ), Replace Table( 1 ) );
// Delete rowNum column
dt << delete columns( "rowNum" );