Wie filtere ich doppelte IDs heraus und belasse nur das letzte Duplikat?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo alle,
Ich hoffe, dass es eine JSL-Lösung gibt, bei der ich einfach ein ' verwenden kann. < ' Nachricht an die Datentabelle. Ich habe eine Datentabelle, in der jede Zeile ein getestetes Gerät darstellt.
Es gibt zwei numerische Spalten, die für jede Zeile eine eindeutige Kennung angeben, nämlich eine Spalte „ID“ und eine Spalte „Wafernummer“. Es gibt auch zwei weitere Spalten, die Datum und Uhrzeit respektvoll angeben. Das Problem besteht darin, dass Geräte manchmal innerhalb desselben Datensatzes erneut getestet werden, was zu doppelten Werten für die ID- und Wafer-Spalten führt. Ich möchte in der Lage sein, alle eindeutigen IDs auszuwählen und im Falle doppelter IDs sicherzustellen, dass nur der letzte Wert (entweder nach Zeilennummer oder Zeitstempel) ausgewählt wird.
Unten finden Sie eine Beispieldatentabelle, die zeigt, wonach ich suche. Die beiden Teile, die erneut getestet wurden (hier rot hervorgehoben, entsprechende Wiederholungstests sind grün) werden ausgeschlossen und alles andere wird ausgewählt.
Jede Hilfe dabei wäre sehr dankbar.
Danke schön.

Betreff: Wie filtere ich doppelte IDs heraus und belasse nur das letzte Duplikat?Hallo nkelleh,
Als ich sagte: „Ich würde die Tabelle nach ID, WaferNum, Datum und Uhrzeit (in dieser Reihenfolge) sortieren“, meinte ich
Current Data Table() << Sort(By(:ID, :WaferNum, :Date, :Time), Order(Ascending));
Ich habe den starken Verdacht, dass das Ausführen mehrerer Sortiervorgänge (jeweils eine Spalte als Argument) nacheinander, wie Sie es getan haben, nicht zu den gleichen Ergebnissen führt wie das Ausführen eines einzelnen Sortiervorgangs mit mehreren Spalten als Argumenten.
Hoffe das hilft
Betreff: Wie filtere ich doppelte IDs heraus und belasse nur das letzte Duplikat?Hallo allerseits,
Vielen Dank für all Ihre Hilfe.
Jeff, Ihr Ansatz hätte für mich großartig funktioniert, wenn sich bei einer weiteren Untersuchung der Daten nicht herausgestellt hätte, dass es Duplikate mit denselben Datums- und Uhrzeitwerten gab (entschuldigen Sie, dies wurde im Beispiel nicht gezeigt).
Am Ende folgte ich dem Vorschlag von jvillaumie. Unten ist meine Implementierung.
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;
Betreff: Wie filtere ich doppelte IDs heraus und belasse nur das letzte Duplikat?Wie bei so vielen Dingen gibt es bei JMP mehrere Möglichkeiten, dies zu erreichen.
Das erste, was zu beachten ist, ist, dass die Col Maximum() Die Funktion ist optional NachVariable Argumente.

Ich denke also, dass Sie dies verwenden können, um Ihre Bedingung für die Auswahl von Zeilen zu erstellen:
(:Date ==Col Maximum(:Date,:ID,:WaferNum ))&(:Time ==
Col Maximum(:Time,:ID,:WaferNum,:Date ));
-Jeff
Betreff: Wie filtere ich doppelte IDs heraus und belasse nur das letzte Duplikat?Ich würde die Tabelle nach ID, WaferNum, Datum und Uhrzeit (in dieser Reihenfolge) sortieren, sodass Zeilen mit derselben ID und WaferNum in der Tabelle aufeinander folgen, wobei die älteren Zeilen über den neuesten stehen.
Ich würde dann eine neue Spalte namens „Duplizieren“ mit dieser Formel erstellen (Sie sollten sie direkt kopieren und in JMP einfügen können):
If( :ID == :ID[Row() + 1, Empty()] & :WaferNum == :WaferNum[Row() + 1, Empty()],
1,
0
)
Zeilen, auf die eine weitere Zeile mit derselben ID und WaferNum folgt (dh Replikate, die nicht die neuesten sind), werden mit einer „1“ gekennzeichnet.
Verwenden Sie SelectWhere Duplicate == 0.
Betreff: Wie filtere ich doppelte IDs heraus und belasse nur das letzte Duplikat?Schauen Sie sich diese Diskussionen an:
Betreff: Syntax: Wie erstelle ich eine Indexspalte nach ID?
JMP-Formel: Rang nach Gruppe
Sobald Sie das Ranking festgelegt haben, können Sie filtern.
Ron
Betreff: Wie filtere ich doppelte IDs heraus und belasse nur das letzte Duplikat?Danke dafür. Ich habe zwar ein Beispiel dafür gesehen, aber ich hatte gehofft, dass es eine Möglichkeit gibt, dies zu erreichen, indem eine Bedingung in der << Select Where()-Nachricht an die Datentabelle angegeben wird. Ich habe das Gefühl, dass es möglich sein sollte, bin mir aber nicht sicher, wie Sie vorgehen würden.
Eine weitere Überlegung besteht darin, dass sich innerhalb eines Teststapels der Datums- und Zeitstempel nicht ändert, was bedeutet, dass Sie immer noch Duplikate haben, bei denen der einzige Unterschied in der Zeilennummer besteht, wenn Sie auf die von mir angegebenen Spalten beschränkt sind. Prost auf jeden Fall.
Betreff: Wie filtere ich doppelte IDs heraus und belasse nur das letzte Duplikat?Eine Möglichkeit könnte darin bestehen, eine Spalte für Datum und Uhrzeit zu erstellen (verkettend). Auf diese Weise können Sie die Tabellenzusammenfassung nach ID und WaferNum verwenden und den Maximalwert für Datum und Uhrzeit anfordern. Dadurch wird eine neue, saubere Tabelle für Sie erstellt.
Ron