Come determinare i valori duplicati?Ciao a tutti,
Ho questo pezzo di codice ma non sono sicuro che ci sia un approccio più appropriato. Il mio ciclo riceve un errore perché alcune delle tabelle dati hanno più valori NBO.
Dati fuori intervallo alla riga 10 nell'accesso o nella valutazione di 'For Each', For Each/*###*/({table}, dt_Test, table << New Column( "Ref" ) ; Wait( 0 ) ; table
:Ref[tabella << ottieni righe dove( :Lot == "NBO" & :N Righe == Col Max( :N Righe, :Lot ) )]
= 1)
Quindi quello che sto cercando di fare è creare un'istruzione If all'interno del ciclo For Each. L'istruzione IF determinerà se NBO non ha duplicati nella colonna Lot, se non ha duplicati, allora metterà 1 nella colonna Ref.
For Each( {table}, dt_Test,
table << New Column("Ref");
wait(0);
If (
//NBO has duplicate, deletes the NBO with lowest N Row value
dt_Test << Select duplicate rows(Match(:Lot)); //only selects the matching values, how can I delete the NBO with lowest N Rows count?
dt_Test << Delete Rows;
,
//if NBO has no duplicates,
table:Ref[table << get rows where( :Lot == "NBO" & :N Rows == col max(:N Rows, :Lot))]=1;
);
);
Automazione e scriptingfinestreR: Come determinare i valori duplicati ed eliminare i dati con il valore di N righe più basso?Sarebbe molto più semplice se potessimo vedere alcuni dati.
R: Come determinare i valori duplicati ed eliminare i dati con il valore di N righe più basso?Ecco un esempio di tabella dati dopo il sottoinsieme. dt ha 2 NBO e funziona bene.
table:Ref[table << get rows where( :Lot == "NBO" & :N Rows == col max(:N Rows, :Lot))]=1;
Tuttavia, in dt2, in cui ho 1 NBO, lo script si interrompe improvvisamente e presenta questo errore:
Dati fuori intervallo alla riga 10 nell'accesso o nella valutazione di 'For Each', For Each/*###*/({table}, dt_Test, table << New Column( "Ref" ) ; Wait( 0 ) ; table
:Ref[tabella << ottieni righe dove( :Lot == "NBO" & :N Righe == Col Max( :N Righe, :Lot ) )]
= 1)
R: Come determinare i valori duplicati ed eliminare i dati con il valore di N righe più basso?Sono un po' confuso con il tuo script e con quello che stai cercando di fare. Stai cercando di trovare lotti duplicati ed eliminare tutti tranne l'ultima riga? E poi impostare NBO come 1 (dovrebbe essercene solo uno)?
R: Come determinare i valori duplicati ed eliminare i dati con il valore di N righe più basso?Scusate, mi sono anche confuso scrivendo la domanda. Quindi, per i dati, prima li sottoporrò a un sottoinsieme, poi passerò in rassegna ogni tabella dati per aggiungere la colonna Ref e il suo valore come 1, dove NBO ha il conteggio più alto in N Rows. Inizialmente ho fatto funzionare questo:
For Each( {table}, dt_Test,
table << New Column("Ref");
wait(0);
table:Ref[table << get rows where( :Lot == "NBO" & :N Rows == col max(:N Rows, :Lot))]=1;
);Ma quando si esegue un loop su una tabella dati con solo 1 NBO presente nella colonna, si verifica questo errore:
Dati fuori intervallo alla riga 10 nell'accesso o nella valutazione di 'For Each', For Each/*###*/({table}, dt_Test, table << New Column( "Ref" ) ; Wait( 0 ) ; table
:Ref[tabella << ottieni righe dove( :Lot == "NBO" & :N Righe == Col Max( :N Righe, :Lot ) )]
= 1)
R: Come determinare i valori duplicati ed eliminare i dati con il valore di N righe più basso?Forse il problema è da qualche altra parte? Cosa contiene dt_test per esempio? E dt_test e table sono usati in un modo un po' strano (anche if potrebbe non fare quello che pensi qui)

Modificherei un po' il tuo codice per renderlo più facile da eseguire il debug (non posizionare le righe get all'interno di [])
Names Default To Here(1);
dt = Open("$DOWNLOADS/dt.jmp");
dt2 = Open("$DOWNLOADS/dt2.jmp");
dts = Eval List({dt, dt2});
For Each({cur_dt}, dts,
cur_dt << New Column("Ref");
//cur_dt = dts[2];
sel_rows = cur_dt << get rows where(:Lot == "NBO" & :N Rows == Col Max(:N Rows, :Lot));
cur_dt:Ref[sel_rows] = 1;
);
In questo modo puoi stampare sel_rows e vedere se è vuoto / cosa contiene
R: Come determinare i valori duplicati?Potrei suggerire un approccio completamente diverso.
1. Ordina la tabella per data o in base a qualsiasi altro criterio che ti indichi qual è il duplicato più recente.
2. unisci la tabella a se stessa (Tabelle>Unisci) e fai clic sull'opzione Rilascia multipli
-Solo il primo dei duplicati, in ordine di riga, finisce nella tabella dei prodotti.
fallo manualmente una volta con il generatore di flussi di lavoro attivato, e poi Bang - Bob è tuo zio - hai lo script per farlo di nuovo. scripting... senza scripting.
R: Come determinare i valori duplicati?bel trucco:)