Sélection et suppression de lignes en double avec conditionSalut les gars,
J'ai cherché sur le forum, mais je n'ai pas trouvé ce que je voulais réaliser, ou peut-être que j'ai raté quelque chose.

Quoi qu'il en soit, j'ai besoin d'aide sur le tableau ci-dessus. Comme on peut le voir, j'ai des doublons mis en évidence par couleur. Le numéro de série est le même pour la plupart car la pièce est inspectée sur différentes sections (comme indiqué 1A, 1B, 2A, 2B, 3A, 3B, 4A, 4B). Habituellement, si la pièce échoue à l'inspection, elle sera réinspectée, ce qui apparaît dans la colonne de nouveau test (0 pour aucun nouveau test, 1 pour le 1er, etc.) Désormais, je ne peux différencier la pièce que par le numéro de nouveau test ou la date au sein du même numéro de série, je souhaite donc conserver le dernier résultat du nouveau test et supprimer les doublons du précédent. Cela signifie que, selon la case en surbrillance ci-dessus, pour le bleu ou le rouge, je souhaite conserver le re-test 1 et supprimer le re-test 0. C'est un peu un casse-tête pour moi, j'aurais donc besoin des conseils de la communauté sur le script pour sélectionner la condition dans le numéro de série et la section afin de déterminer le dernier re-test, puis conserver le dernier re-test et supprimer les doublons précédents. J'espère que vous avez tous votre contribution à ce sujet. Merci
Re : Sélection et suppression de lignes en double avec conditionSi vous souhaitez supprimer les lignes en double correspondant à toutes les colonnes sauf une (ou quelques-unes), voici ma solution de travail.
L'avantage est qu'il n'est pas nécessaire de spécifier chaque nom de colonne.
// delete duplicate rows, where only column ID is different
column_list = dtProcess << Get Column Names( string );
Remove From( column_list, As List( Loc( column_list, "ID" ) ) ); // remove "ID"
dtProcess << Select Duplicate Rows( Match(As List(column_list)));
doublerows = dtProcess << get selected rows;
num_selected = n rows(doublerows);
if(num_selected >0,
dtProcess << delete rows;
print("Removed " || char(num_selected) || " rows from process table.")
,
print("No duplicate rows in process table, excluding column ID.")
);:
Re : Sélection et suppression de lignes en double avec conditionGrande aide! Merci!
Je construisais quelque chose comme ça, d'une manière ou d'une autre, ma combinaison s'est trompée lors de la sélection des colonnes.
Merci!
Re : Sélection et suppression de lignes en double avec conditionJ'ai apporté quelques amendements en fonction de mon tableau. Merci!
Re : Sélection et suppression de lignes en double avec conditionSi vous disposez d'une version antérieure de JMP, << Sélectionner les lignes en double peut ne pas être disponible. Essayez ensuite l’approche ci-dessous. Le code doit sélectionner et supprimer les lignes en double (en fonction de la correspondance du numéro de série et de la section) avec la date la plus ancienne. Le tri n'a pas d'importance.
dt = Current Data Table();
dt << select where(Col Max(:Date, :SerialNo, :Section) > :Date());
dt << delete rows();
Re : Sélection et suppression de lignes en double avec conditionIl existe une fonction appelée
Sélectionnez les lignes en double()
qui peut être utilisé pour cela, mais il est basé sur la recherche de lignes suivant une ligne unique.Par conséquent, le tableau doit être trié à l’envers avant d’utiliser la fonction.Vous trouverez ci-dessous un exemple de script pour ce faire.Comme je n'avais pas d'exemple de table de données sur laquelle exécuter ceci, le script n'a pas été testé, mais il est très proche de ce dont vous avez besoin.
La documentation sur la fonction peut être trouvée dans l'index des scripts
Names Default To Here( 1 );
dt = Current Data Table();
// Add a new column to preserve the current order
dt << New Column( "rowNum", formula( Row() ) );
// Remove the formula to convert values to static values
:rowNum << delete property( "formula" );
// Sort the data table in referse order, since one wants to
// keep the most recent value
dt << sort( by( rowNum ), order( descending ), Replace Table( 1 ) );
// Find the duplicate rows
dt << Select Duplicate Rows( Match( :SerialNo, :Date, :Retest ) );
// Delete Duplicates
dt << delete rows;
// Reorder the table
dt << sort( by( rowNum ), order( ascending ), Replace Table( 1 ) );
// Delete rowNum column
dt << delete columns( "rowNum" );