Créer une table de données en comptant les lots dans la tableBonjour la communauté JMP
J'ai un ensemble de données qui n'est que partiellement rempli avec des numéros de lot.
Mon objectif est de créer un ensemble de données contenant une ligne par lot.
Je peux calculer le nombre de lignes nécessaires en comparant les numéros du premier et du dernier lot.
Comme le montre l'exemple, j'aurais besoin d'un ensemble de données avec 30 lignes car le premier numéro de lot est 7 et le dernier est 37.
Dans le nom du lot, les 3 premiers et les 2 derniers chiffres doivent être ignorés.
Dans mon esprit, cela devrait être simple, mais je suis bloqué…
J'apprécierais beaucoup de me débloquer !
Merci
chrétien
Automatisation et scriptsFusion et nettoyage des donnéesRe : Créer une table de données en comptant les lots dans la tableHmmm, je ne comprends pas votre question ? Vous avez plusieurs lignes avec des informations identiques (les 3 premières, les 4 et 5), et il vous manque les lignes 21-23, 25-26 et 29 ? De plus, les 6 premiers chiffres sont identiques.
Que souhaitez-vous faire exactement ? Vous pouvez toujours faire un clic droit sur la colonne et utiliser « Recode ».
Re : Créer une table de données en comptant les lots dans la tableQuelque chose comme ça ? Cela crée une nouvelle table avec une seule ligne pour chaque lot, au lieu de plusieurs lignes, et complète les lots manquants.
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 : Créer une table de données en comptant les lots dans la tableCela ne créera pas de numéros de lot mais uniquement les numéros.
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))
);
Vous pouvez rajouter des numéros de lot en transformant cette liste d'éléments en chaîne et en créant une table à partir de celle-ci (mêmes first_val et last_val que précédemment).
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 : Créer une table de données en comptant les lots dans la tableMerci Jarmo ! C'est parfait.
En écrivant cet article, je me vantais de l’incroyable communauté JMP, et je n’ai pas été déçu !
Salut, Christian
Re : Créer une table de données en comptant les lots dans la tableMerci pour la réponse @mmarchandFSLR !
Votre script fonctionne parfaitement !
Votre solution contient des invites/scripts qui sont nouveaux pour moi, par exemple, Associative Array, Transform Each, Eval, Eval Expr.
J'ai hâte de découvrir comment fonctionne votre solution !
En écrivant cet article, je me suis vanté de l’incroyable communauté JMP et je n’ai pas été déçu !
Salut, Christian
Re : Créer une table de données en comptant les lots dans la tableExplication simple de certaines de ces fonctions et une modification 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 : Créer une table de données en comptant les lots dans la tableVous pouvez créer des lignes en incrémentant les numéros de lot de manière séquentielle.