Entfernen doppelter Zeilen aus der aktuellen TabelleHallo,
Ich habe derzeit 256.000 Zeilen in einer übergeordneten Tabelle. Bei der Analyse habe ich herausgefunden, dass ich nur wenige doppelte Zeilen habe. Diese Tabelle erhält ständig neue Daten, die per Skript ergänzt werden. Und es besteht die Möglichkeit, dass die Quelldaten erneut dupliziert werden.
Deshalb versuche ich, ein Bereinigungsskript zu erstellen, das ich ausführen kann, bevor ich einen Teil meiner Analyse durchführe. Ich habe hier nach anderen Diskussionen gesucht und eine Lösung gefunden ( https://community.jmp.com/t5/Discussions/Eliminating-Duplicate-Rows-keeping-first-duplicate/td-p/3424 ), die ich für meine Anwendung angepasst habe
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),
);
Diese Lösung hat genau das getan, was ich gesucht habe. Die übergeordnete Tabelle kann jedoch nicht aktualisiert werden. Es wird eine neue Tabelle mit den richtigen Zeilen erstellt, aber meine übergeordnete Tabelle bleibt unverändert. Wie kann ich diesen Code für meine übergeordnete Tabelle verwenden, um Zeilen aus der übergeordneten Tabelle zu löschen, in diesem Fall „Currnet Data Table()“.
Außerdem (ich weiß es bereits, wollte es aber bestätigen) habe ich 25 Spalten in meinem Datensatz. Sollte ich das obige Skript ausführen, um alle 25 Spalten genau abzugleichen, oder kann ich, solange ich eine Zeitspalte habe, eine geringere Anzahl von Spalten ausführen (z. B. 4 im obigen Beispiel)? Ich wollte das Skript nicht verlangsamen, da die JMP-Datei riesige Datenmengen enthalten wird.
Dank im Voraus!
Betreff: Doppelte Zeilen aus der aktuellen Tabelle entfernenDanke GZMORGAN0,
Mit Ihrer Methodik konnte ich Duplikate eliminieren. Neue Spalte mit DIF-Formel erstellt. Wählen Sie dann mithilfe der nach Skripten sortierten Zeitspalte alle Nullen aus (diff = 0 bedeutet doppelte Zeile) und löschen Sie die Duplikate.Betreff: Doppelte Zeilen aus der aktuellen Tabelle entfernenNiiD,
Wenn Zeit Ihr Hauptbezeichner ist, besteht eine Möglichkeit darin, eine neue Spalte für zu erstellen Dif(:Datetime,1) oder Zeilen abrufen, in denen Dif(:Datetime,1) ==0 es ein Duplikat sein sollte. Wenn es jedoch Datensätze mit derselben Datums- und Uhrzeitangabe, aber unterschiedlichen Tools oder anderen Bezeichnern geben kann, sortieren Sie nach diesen Bezeichnern und der Datums- und Uhrzeitangabe und rufen Sie dann die Zeilen ab, in denen oder wo bezeichner == Lag(bezeichner,1) & Dif(:Datetime,1) ausgewählt wird ) ==0. Dann löschen Sie diese Zeilen.
Betreff: Doppelte Zeilen aus der aktuellen Tabelle entfernenDanke! Ich werde versuchen, Ihren Code zu verwenden, um zu sehen, ob ich ihn anpassen kann.
Ich habe eine Zeitspalte, mit der ich sortieren kann, um identische Zeilen nebeneinander zu erhalten. Alle anderen Spalten sind tatsächliche Prozessdaten, daher gibt es keine Duplikate (außer Prozesskennungen wie Produktname, Produkttyp). Aber die Zeitspalte kann verwendet werden, um zu sortieren und identische Zeilen nebeneinander anzuzeigen. Dann stellt sich die Frage, ob man eine der identischen Zeilen auswählt.
Ich habe festgestellt, dass JMP 14 über eine neue Funktion verfügt, die jedoch in JMP 13 (meiner Version) nicht unterstützt wird. Wenn also ein kleiner, einfacher Code zum Auswählen einer doppelten Zeile (einer von zwei Einträgen) vorhanden ist, kann ich sie einfach löschen.
dt3 = Data Table( "ProcessDataTable" ) << Select Duplicate Rows();
Hintergrund zu Duplikaten: Mein Skript ruft Daten aus einer wöchentlich generierten CSV-Datei ab, die in die JMP-Mastertabelle importiert wird. Die wöchentlichen Daten stammen aus den letzten sieben Tagen ab dem Zeitpunkt ihrer Generierung. Wenn also die CSV-Datei für eine Woche am Montag um 12:00 Uhr und nächste Woche um Montag um 8:00 Uhr generiert wurde, könnte es ein Duplikat von drei Stunden geben.
Das ist es, was ich ausschließen möchte, sobald Daten in JMP eingehen. Es gibt keine Möglichkeit, Duplikate zu entfernen, bevor sie JMP erreichen. Daher hoffe ich auf eine Lösung in JMP.
Betreff: Doppelte Zeilen aus der aktuellen Tabelle entfernenNiiD,
Ihnen fehlen wichtige Informationen zu Ihren Daten: Gibt es eine oder mehrere Spalten, die einen eindeutigen Datensatz darstellen sollen? Zum Beispiel:
- Eine mehrstufige Fertigungslinie, wie etwa Halbleiter, verwendet normalerweise die Spalten Losnummer, Wafernummer, Vorgangsnummer, Ausrüstungs-ID und Datum/Uhrzeit
- eine Arzneimittelstudie mit wiederholten Messungen: Probanden-ID und Datum/Uhrzeit
- usw.
Wenn diese Spalten dann eindeutige Datensätze (Schlüssel) darstellen sollen, sollten andere Spalten keine Rolle spielen und Sie müssen entscheiden, ob Sie den ersten oder den letzten Datensatz behalten möchten.Mit anderen Worten: Gibt Ihre Tischbestellung Auskunft über die Duplikate? Beispielsweise werden Datenbanken häufig nach der aktuellsten Reihenfolge sortiert.
Das beigefügte Skript erstellt eine Tabelle mit 256.000 eindeutigen Zeilen und 25 Spalten. Wählt zufällig 200 Zeilen aus. Die ersten 100 werden dupliziert, sobald die zweiten 100 zweimal dupliziert werden, und die Tischreihenfolge wird neu gemischt. Jetzt sind es also 256.300 Zeilen.
Es wurde mit 2 String-Spalten und 2 Integer-Spalten erstellt, also 4 Spalten, die die eindeutigen Schlüssel darstellen.Und dieses Skript behält die höchstgeordnete Zeile in der Tabelle bei. Die Zwischentabellen werden zum Testen der Leistung ohne Renderzeit auf unsichtbar gesetzt. Um jedoch zu verstehen, was der Code tut, möchten Sie ihn möglicherweise so konvertieren, dass er sichtbar ist.
Ich habe das 6 Mal ausgeführt und jedes Mal hat es 2,0x Sekunden auf meinem PC gedauert.Die Zeit variiert je nach Anzahl der Duplikate.
Das Skript findet die zu löschenden Zeilen, indem es nur die duplizierten Zeilen bearbeitet, die viel kleiner als 256 KB sein sollten.
Schlussbemerkung. Anstatt diese Zeilen aus Ihrer Haupttabelle zu löschen, möchten Sie sie möglicherweise ausschließen oder eine Spalte „Behalten“ oder „Speichern“ beibehalten, damit Sie die Zeilenzustände zurücksetzen können, um sie auszuschließen.
Viel Glück!