Crea una tabella dati contando i batch nella tabellaCiao comunità JMP
Ho un set di dati che è compilato solo parzialmente con i numeri di lotto.
Il mio obiettivo è creare un set di dati contenente una riga per batch.
Posso calcolare quante righe sono necessarie confrontando il numero del primo e dell'ultimo lotto.
Come si vede nell'esempio, avrei bisogno di un set di dati con 30 righe, poiché il primo lotto è numero 7 e l'ultimo è numero 37.
Nel nome del batch, le prime 3 cifre e le ultime 2 cifre devono essere ignorate.
Nella mia mente, dovrebbe essere tutto molto semplice, ma sono bloccato...
Apprezzerei molto se potessi sbloccarmi!
Grazie
cristiano
Automazione e scriptingFusione e pulizia dei datiRe: Crea una tabella dati contando i batch nella tabellaHmmm non capisco la tua richiesta? Hai più righe con informazioni identiche (le prime 3 e le righe 4 e 5), ti mancano le righe con 21-23, 25-26, 29? Anche le prime 6 cifre sono identiche.
Cosa vuoi fare esattamente? Puoi sempre cliccare con il tasto destro sulla colonna e usare recode.
Re: Crea una tabella dati contando i batch nella tabellaQualcosa del genere? Crea una nuova tabella con una singola riga per ogni batch, invece di più righe e riempie i batch mancanti.
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: Crea una tabella dati contando i batch nella tabellaIn questo modo non verranno creati numeri di lotto, ma solo i numeri.
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))
);
È possibile aggiungere nuovamente i numeri di lotto trasformando l'elenco degli elementi in una stringa e creando una tabella da quella (stessi first_val e last_val come in precedenza)
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: Crea una tabella dati contando i batch nella tabellaGrazie Jarmo! È perfetto.
Mentre scrivevo questo post, mi vantavo di quanto sia incredibile la comunità JMP e non sono rimasto deluso!
Saluti, Christian
Re: Crea una tabella dati contando i batch nella tabellaGrazie per la risposta @mmarchandFSLR !
Il tuo script funziona perfettamente!
La tua soluzione contiene alcuni prompt/script che sono nuovi per me, ad esempio, Associative Array, Transform Each, Eval, Eval Expr.
Non vedo l'ora di scoprire come funziona la tua soluzione!
Mentre scrivevo questo post, mi vantavo di quanto sia incredibile la comunità JMP e non sono rimasto deluso!
saluti, Christian
Re: Crea una tabella dati contando i batch nella tabellaSemplice spiegazione di alcune di queste funzioni e una modifica 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: Crea una tabella dati contando i batch nella tabellaÈ possibile creare righe incrementando i numeri di batch in sequenza.