Crear una tabla de datos contando lotes en la tablaHola Comunidad JMP
Tengo un conjunto de datos que solo está parcialmente completo con números de lote.
Mi objetivo es crear un conjunto de datos que contenga una fila por lote.
Puedo calcular cuántas filas se necesitan comparando los números del primer y del último lote.
Como se ve en el ejemplo, necesitaría un conjunto de datos con 30 filas, ya que el primer número de lote es 7 y el último es 37.
En el nombre del lote, se deben ignorar los 3 primeros y los 2 últimos dígitos.
En mi mente esto debería ser sencillo, pero estoy atascado…
¡Me encantaría poder desatascarme!
Gracias
cristiano
Automatización y scriptingCombinación y limpieza de datosRe: Crear una tabla de datos contando lotes en la tablaMmm, no entiendo tu consulta. Tienes varias filas con información idéntica (las primeras 3, y las filas 4 y 5). ¿Te faltan las filas 21-23, 25-26 y 29? Además, los primeros 6 dígitos son idénticos.
¿Qué quieres hacer exactamente? Puedes hacer clic derecho en la columna y usar "recodificar".
Re: Crear una tabla de datos contando lotes en la tabla¿Algo así? Crea una nueva tabla con una sola fila para cada lote, en lugar de varias, y completa los lotes faltantes.
Names Default To Here( 1 );
Batch_vals = Associative Array( :Batch ) << Get Keys;
prefix = Left( :Batch[1], 3 );
suffix = Right( :Batch[1], 2 );
rootlength = Length( Batch_vals[1] ) - Length( prefix ) - Length( suffix );
Batch_nums = Transform Each( {v, i}, Batch_vals, Num( Substitute( v, {prefix, suffix}, "" ) ) );
Min_batch = Min( Batch_nums );
Max_batch = Max( Batch_nums );
Batches = Min_batch :: Max_batch;
dt = New Table( "Batches", New Column( "Batch Number", numeric, continuous, Set Values( Batches ) ) );
Eval(
Eval Expr(
dt << New Column( "Batch", character, Formula( Expr( prefix ) || Right( Char( :Batch Number ), rootlength, "0" ) || Expr( suffix ) ) )
)
);
dt:Batch << Delete Formula;Re: Crear una tabla de datos contando lotes en la tablaEsto no creará números de lote, sino solo los números.
Names Default To Here(1);
dt = Data Table("Format");
Summarize(dt, uniq = By(:Batch));
first_val = Num(Substr(uniq[1], 4, Length(uniq[1]) - 5));
last_val = Num(Substr(uniq[N Items(uniq)], 4, Length(uniq[1]) - 5));
dt = New Table("Res",
New Column("R", Numeric, Ordinal, Values(first_val::last_val))
);
Puede volver a agregar números de lote transformando esa lista de artículos en una cadena y crear una tabla a partir de ella (el mismo first_val y last_val que en el caso anterior)
batches = Transform Each({item}, As List((first_val::last_val)`),
"245" || Right("00000" || Char(item), 5) || "00"
);
dt = New Table("Res2",
New Column("R", Character, Ordinal, Values(batches))
);Re: Crear una tabla de datos contando lotes en la tabla¡Gracias Jarmo! Esto es perfecto.
Mientras escribía este post, estaba alardeando de lo increíble que es la comunidad JMP, ¡y no me decepcioné!
Saludos, Christian
Re: Crear una tabla de datos contando lotes en la tabla¡Gracias por la respuesta @mmarchandFSLR !
¡Tu script funciona perfectamente!
Su solución contiene algunas indicaciones/scripts que son nuevos para mí, por ejemplo, Matriz asociativa, Transformar cada uno, Eval, Eval Expr.
¡Estoy deseando profundizar en cómo funciona tu solución!
Mientras escribía este post, me jacté de lo increíble que es la comunidad JMP ¡y no me decepcioné!
Saludos, Christian
Re: Crear una tabla de datos contando lotes en la tablaExplicación sencilla de algunas de esas funciones y una modificación importante:
Names Default To Here( 1 );
//An associative array is a dictionary or hash map that links keys to values. Each key must be unique.
//Using a single column as the argument for the array gives us the unique values of the column with each value set to 1
//The <<GET keys="" message="" then="" yields="" the="" only=""></GET>
Re: Crear una tabla de datos contando lotes en la tablaPuede crear filas incrementando los números de lote secuencialmente.