Comment filtrer les ID en double en ne laissant que le dernier doublon ?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Salut tout le monde,
J'espère qu'il existe une solution JSL où je peux simplement utiliser un ' < ' message à la table de données. J'ai une table de données de données dans laquelle chaque ligne représente un appareil testé.
Il y a 2 colonnes numériques qui spécifient un identifiant unique pour chaque ligne, c'est-à-dire une colonne 'ID' et une colonne 'wafer number'. Il y a aussi 2 autres colonnes qui spécifient la date et l'heure avec respect. Le problème est que parfois, les appareils sont retestés dans le même ensemble de données, ce qui entraîne des valeurs en double pour les colonnes ID et wafer. J'aimerais pouvoir sélectionner tous les identifiants uniques et, dans le cas d'identifiants en double, m'assurer que seule la dernière valeur (soit par numéro de ligne, soit par horodatage) est sélectionnée.
Vous trouverez ci-dessous un exemple de tableau de données montrant ce que je recherche. Les deux parties qui ont été retestées (surlignées ici en rouge, les retests correspondants sont en vert) sont exclues et tout le reste est sélectionné.
Toute l'aide pouvant etre apportée serait très appréciée.
Merci.

Re : Comment filtrer les ID en double en ne laissant que le dernier doublon ?Salut nkelleh,
quand j'ai dit "je trierais la table par ID, WaferNum, date et heure (dans cet ordre)", je voulais dire
Current Data Table() << Sort(By(:ID, :WaferNum, :Date, :Time), Order(Ascending));
Je soupçonne très fortement que l'exécution de plusieurs Sort (une seule colonne comme argument pour chacun) les uns après les autres, comme vous l'avez fait, ne donnera pas les mêmes résultats que l'exécution d'un seul Sort avec plusieurs colonnes comme arguments.
J'espère que cela t'aides
Re : Comment filtrer les ID en double en ne laissant que le dernier doublon ?Salut tout le monde,
Merci beaucoup pour toute votre aide.
Jeff, votre approche aurait très bien fonctionné pour moi, sauf qu'après un examen plus approfondi des données, il s'avère qu'il y avait des doublons avec les mêmes valeurs de date et d'heure (excuses, cela n'a pas été montré dans l'exemple).
En fin de compte, j'ai accepté la suggestion de jvillaumie. Ci-dessous mon implémentation.
mydt = Current Data Table();
//Sort columns by ID, wafer num, date in that order
mydt << Sort( Replace Table, By(:ID), Order(Ascending));
mydt << Sort( Replace Table, By(:WaferNum), Order(Ascending));
mydt << Sort( Replace Table, By(:Date), Order(Ascending));
//Select duplicates, i.e. if the next row has the same values for ID and waferNum as the current row, i.e. everything but the last duplicate
mydt << Select Where(
:ID == :ID[Row() + 1] & :WaferNum == :WaferNum[Row() + 1]
);
//Delete Selection
mydt <<DeleteRows;
Re : Comment filtrer les ID en double en ne laissant que le dernier doublon ?Comme tant d'autres choses avec JMP, il existe plusieurs façons d'y parvenir.
La première chose à noter est que le Col Maximum() la fonction prendra en option ParVariable arguments.

Donc, je pense que vous pouvez l'utiliser pour construire votre condition de sélection de lignes :
(:Date ==Col Maximum(:Date,:ID,:WaferNum ))&(:Time ==
Col Maximum(:Time,:ID,:WaferNum,:Date ));
-Jeff
Re : Comment filtrer les ID en double en ne laissant que le dernier doublon ?Je trierais le tableau par ID, WaferNum, date et heure (dans cet ordre), de sorte que les lignes avec le même ID et WaferNum se suivent dans le tableau, avec les plus anciennes au-dessus des plus récentes.
Je créerais alors une nouvelle colonne appelée "Dupliquer", avec cette formule (vous devriez pouvoir la copier directement et la coller dans JMP) :
If( :ID == :ID[Row() + 1, Empty()] & :WaferNum == :WaferNum[Row() + 1, Empty()],
1,
0
)
Il signalera les lignes qui sont suivies d'une autre ligne avec le même ID et WaferNum (c'est-à-dire les répliques qui ne sont pas les plus récentes) avec un "1".
Utilisez SelectWhere Duplicate == 0.
Re : Comment filtrer les ID en double en ne laissant que le dernier doublon ?regarde ces discussions:
Re : Syntaxe : comment créer une colonne d'index par ID
Formule JMP : Classement par groupe
une fois que vous aurez établi le classement vous pourrez filtrer.
Ron
Re : Comment filtrer les ID en double en ne laissant que le dernier doublon ?Merci pour cela. J'ai bien vu un exemple de cela, mais j'espérais qu'il existe un moyen d'y parvenir en spécifiant une condition dans le message << Select Where() à la table de données. J'ai l'impression que cela devrait être possible, mais je ne sais pas comment vous vous y prendriez.
En outre, une autre considération est que dans un lot de test, la date et l'heure ne changent pas, ce qui signifie que vous aurez toujours un doublon où la seule différence réside dans le numéro de ligne lorsqu'il est limité aux colonnes que j'ai spécifiées. Bravo en tout cas.
Re : Comment filtrer les ID en double en ne laissant que le dernier doublon ?une option pourrait être de créer une colonne pour la date et l'heure (concaténation) . cela vous permettra d'utiliser le résumé du tableau par ID et WaferNum et de demander la valeur Max de la date et de l'heure. cela produira une nouvelle table propre pour vous.
Ron