Suppression des lignes en double de la table actuelleSalut,
J'ai 256k lignes dans une table parent en ce moment. En faisant quelques analyses, j'ai découvert que j'avais peu de lignes en double. Cette table reçoit constamment de nouvelles données modifiées par le biais d'un script. Et il est possible que les données source aient à nouveau dupliqué.
J'essaie donc de créer un script de nettoyage, que je peux exécuter avant d'exécuter certaines de mes analyses. J'ai cherché d'autres discussions ici et j'ai trouvé une solution ( https://community.jmp.com/t5/Discussions/Eliminating-Duplicate-Rows-keeping-first-duplicate/td-p/3424 ), que j'ai personnalisé pour mon application
dt3 = Current Data Table();
dt2 = dt3 << Summary(
group(:CL1, :CL2, :CL3, :CL4)
);
dt3 << join(
with (dt2),
update,
by matching columns (
:CL1 = :CL1,
:CL2 = :CL2,
:CL3 = :CL3,
:CL4 = :CL5
),
drop multiples(1,0),
name("include non-matches")(0,0),
preserve main table order (1),
);
Cette solution a fait ce que je cherchais. Cependant, il n'est pas en mesure de mettre à jour la table parent. Il crée une nouvelle table avec les bonnes lignes, mais ma table parent est inchangée. Comment puis-je utiliser ce code sur ma table parent pour supprimer des lignes de la table parent, qui dans ce cas est "Currnet Data Table ()".
Aussi, (je sais déjà, mais je voulais confirmer), j'ai 25 colonnes dans mon ensemble de données. Dois-je exécuter le script ci-dessus pour correspondre à toutes les 25 colonnes pour être précis ou tant que j'ai une colonne de temps, je peux exécuter moins de colonnes (comme 4 par exemple ci-dessus) ? Je ne voulais pas ralentir le script car j'aurais une énorme quantité de données dans le fichier JMP.
Merci d'avance!
Re : Supprimer les lignes en double de la table actuelleMerci GZMORGAN0,
J'ai pu utiliser votre méthodologie pour éliminer les doublons. Création d'une nouvelle colonne avec la formule DIF. Ensuite, en utilisant la colonne de temps triée par script, sélectionnez tous les zéros (diff = 0 signifiant une ligne en double) et supprimez les doublons.Re : Supprimer les lignes en double de la table actuelleNiiD,
Si le temps est votre identifiant principal, une option consiste à créer une nouvelle colonne pour Dif(:DateHeure,1) ou obtenez des lignes où Dif(:Datetime,1) ==0, il devrait s'agir d'un doublon. Si toutefois, il peut y avoir des enregistrements avec le même datetime, mais des outils différents ou d'autres identifiants, alors triez par ces identifiants et Datetime puis obtenez des lignes où ou sélectionnez où identifier == Lag(identifier,1) & Dif(:Datetime,1 ) ==0. Supprimez ensuite ces lignes.
Re : Supprimer les lignes en double de la table actuelleMerci! Je vais essayer d'utiliser votre code pour voir si je peux l'adapter.
J'ai une colonne de temps, que je peux utiliser pour obtenir des lignes identiques les unes à côté des autres. Toutes les autres colonnes sont des données de processus réelles, il n'y a donc pas de doublons (autres que les identifiants de processus comme le nom du produit, le type de produit). Mais la colonne de temps peut être utilisée pour trier et avoir des lignes identiques les unes à côté des autres. alors la question devient de sélectionner l'une des lignes identiques.
J'ai trouvé que JMP 14 a une nouvelle fonctionnalité, mais cela n'est pas pris en charge dans JMP 13 (ma version). Alors peut-être que s'il y a un petit code facile pour sélectionner une ligne en double (une entrée sur deux), alors je peux simplement les supprimer.
dt3 = Data Table( "ProcessDataTable" ) << Select Duplicate Rows();
Contexte des doublons : mon script extrait les données d'un fichier CSV généré chaque semaine, qui est importé dans la table principale JMP. Les données hebdomadaires datent des sept derniers jours depuis leur génération. Donc, si pendant une semaine, le CSV a été généré le lundi à 12h00 et la semaine suivante, il a été généré le lundi à 8h00, alors il pourrait y avoir un doublon de trois heures.
C'est ce que je cherche à exclure une fois que les données entrent dans JMP. Il n'est pas possible d'éliminer les doublons avant qu'ils n'atteignent JMP, j'espère donc une solution dans JMP.
Re : Supprimer les lignes en double de la table actuelleNiiD,
Il vous manque des informations clés sur vos données : existe-t-il une ou plusieurs colonnes qui devraient représenter un enregistrement unique ? Par exemple:
- une ligne de fabrication en plusieurs étapes, comme les semi-conducteurs, utiliserait généralement les colonnes Lot#, Wafer#, Operation#, Equip ID & Datetime
- une étude de médicaments à mesures répétées : identifiant du sujet et date/heure
- etc.
Ensuite, si ces colonnes doivent représenter des enregistrements uniques (clés), les autres colonnes ne doivent pas avoir d'importance et vous devez décider si vous souhaitez conserver le premier ou le dernier enregistrement.En d'autres termes, votre ordre de table fournit-il des informations sur les doublons ? Par exemple, les bases de données sont souvent classées du plus récent au plus ancien.
Le script attaché crée une table de 256k lignes uniques et 25 colonnes. Sélectionne au hasard 200 lignes. Les 100 premiers sont dupliqués une fois que les 100 seconds sont dupliqués deux fois, et l'ordre de la table est mélangé. Il y a donc maintenant 256 300 lignes.
Il a été créé avec 2 colonnes de chaînes et 2 colonnes d'entiers donc 4 colonnes qui représentent les clés uniques.Et ce script conservant la ligne la mieux classée de la table. Les tables intermédiaires sont définies comme invisibles pour tester les performances sans temps de rendu. Cependant, pour comprendre ce que fait le code, vous voudrez peut-être les convertir pour qu'ils soient visibles.
J'ai exécuté cela 6 fois et chacune a pris 2,0 fois plus de secondes sur mon PC.Le temps varie en fonction du nombre de dupes.
Le script trouve les lignes à supprimer en ne travaillant que sur les lignes dupliquées qui doivent être bien inférieures à 256k.
Note finale. Au lieu de supprimer ces lignes de votre table principale, vous souhaiterez peut-être les exclure ou conserver une colonne Keep ou Save afin de pouvoir réinitialiser les états de ligne pour les exclure.
Bonne chance!