¿Cómo determinar valores duplicados?Hola a todos,
Tengo este fragmento de código, pero no estoy seguro de si existe un enfoque más adecuado para esto. Mi bucle genera un error porque algunas de las tablas de datos tienen varios valores NBO.
Datos fuera de rango en la fila 10 en el acceso o evaluación de 'For Each', For Each/*###*/({table}, dt_Test, table << New Column( "Ref" ) ; Wait( 0 ) ; table
:Ref[tabla << obtener filas donde( :Lote == "NBO" y :N filas == Col Max( :N filas, :Lote ) )]
= 1)
Entonces, lo que intento hacer es crear una declaración IF dentro del bucle For Each. La declaración IF determinará si NBO no tiene duplicados en la columna Lot. Si no tiene duplicados, entonces colocará 1 en la columna 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;
);
);
Automatización y scriptingVentanasRe: ¿Cómo determinar valores duplicados y eliminar los datos con el valor N de filas más bajo?Sería mucho más fácil si pudiéramos ver algunos de los datos.
Re: ¿Cómo determinar valores duplicados y eliminar los datos con el valor N de filas más bajo?Aquí hay una tabla de datos de muestra después del subconjunto. dt tiene 2 NBO y esto funciona bien.
table:Ref[table << get rows where( :Lot == "NBO" & :N Rows == col max(:N Rows, :Lot))]=1;
Sin embargo, en dt2, que tengo 1 NBO, el script se detiene de repente y tiene este error:
Datos fuera de rango en la fila 10 en el acceso o evaluación de 'For Each', For Each/*###*/({table}, dt_Test, table << New Column( "Ref" ) ; Wait( 0 ) ; table
:Ref[tabla << obtener filas donde( :Lote == "NBO" y :N filas == Col Max( :N filas, :Lote ) )]
= 1)
Re: ¿Cómo determinar valores duplicados y eliminar los datos con el valor N de filas más bajo?Estoy un poco confundido con tu script y lo que intentas hacer. ¿Estás intentando encontrar lotes duplicados y eliminar todos menos la última fila? ¿Y luego establecer NBO como 1 (debería quedar solo uno)?
Re: ¿Cómo determinar valores duplicados y eliminar los datos con el valor N de filas más bajo?Lo siento, yo también me confundí al escribir la pregunta. Por lo tanto, para los datos, primero los subconjunto y luego paso por cada tabla de datos para agregar la columna Ref y su valor como 1, donde NBO tiene el recuento más alto en N filas. Al principio, logré que esto funcionara:
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;
);Pero cuando se realiza un bucle en una tabla de datos con solo 1 NBO presente en la columna, aparece este error:
Datos fuera de rango en la fila 10 en el acceso o evaluación de 'For Each', For Each/*###*/({table}, dt_Test, table << New Column( "Ref" ) ; Wait( 0 ) ; table
:Ref[tabla << obtener filas donde( :Lote == "NBO" y :N filas == Col Max( :N filas, :Lote ) )]
= 1)
Re: ¿Cómo determinar valores duplicados y eliminar los datos con el valor N de filas más bajo?¿Quizás el problema esté en otra parte? ¿Qué contiene dt_test, por ejemplo? Y dt_test y table se utilizan de una manera un poco extraña (además, es posible que if no esté haciendo lo que crees aquí).

Modificaría un poco tu código para que sea más fácil de depurar (no coloques filas get dentro de los [])
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;
);
De esta manera puedes imprimir el sel_rows y ver si está vacío / qué tiene
Re: ¿Cómo determinar valores duplicados?Quizás sugeriría un enfoque completamente diferente.
1. Ordene la tabla por fecha o lo que le indique cuál es el duplicado más actual.
2. Unir la tabla a sí misma (Tablas>Unir) y hacer clic en la opción Eliminar múltiplos
-Solo el primero, por orden de fila, de los duplicados termina en la tabla de productos.
haz esto manualmente una vez con el generador de flujo de trabajo activado, y luego ¡Bang!, Bob es tu tío, tienes el script para hacerlo nuevamente. scripting... sin scripting.
Re: ¿Cómo determinar valores duplicados?buen truco:)