Auswählen und Entfernen doppelter Zeilen mit BedingungHallo Leute,
Ich habe im Forum gesucht, bin aber nicht annähernd zu dem gekommen, was ich erreichen wollte, oder vielleicht habe ich es verpasst.

Wie auch immer, ich brauche Hilfe zu der Tabelle oben. Wie man sehen kann, habe ich farblich hervorgehobene Duplikate. Die Seriennummer ist größtenteils gleich, da das Teil in verschiedenen Abschnitten geprüft wird (siehe Abbildungen 1A, 1B, 2A, 2B, 3A, 3B, 4A, 4B). Wenn das Teil die Prüfung nicht besteht, wird es normalerweise erneut geprüft, was in der Spalte „Erneute Prüfung“ angezeigt wird (0 für keine erneute Prüfung, 1 für 1. usw.). Jetzt kann ich das Teil nur anhand der Anzahl der Wiederholungstests oder des Datums innerhalb derselben Seriennummer unterscheiden, daher möchte ich das letzte Ergebnis der Wiederholungsprüfung behalten und die Duplikate der vorherigen löschen. Das bedeutet, dass ich gemäß dem hervorgehobenen Feld oben für Blau oder Rot den Wiederholungstest 1 beibehalten und den Wiederholungstest 0 entfernen möchte. Das bereitet mir ziemliche Kopfschmerzen, daher bräuchte ich den Rat der Community zum Skript, um die Bedingung innerhalb der Seriennummer und des Abschnitts auszuwählen, um den letzten erneuten Test herauszufinden, dann den neuesten erneuten Test beizubehalten und vorherige Duplikate zu entfernen. Ich hoffe, dass Sie alle dazu einen Beitrag leisten können. Danke
Betreff: Auswählen und Entfernen doppelter Zeilen mit BedingungWenn Sie doppelte Zeilen entfernen möchten, die allen Spalten bis auf eine (oder einige wenige) entsprechen, ist dies meine Arbeitslösung.
Der Vorteil besteht darin, dass nicht jeder Spaltenname angegeben werden muss.
// 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.")
);:
Betreff: Auswählen und Entfernen doppelter Zeilen mit BedingungTolle Hilfe! Danke!
Ich habe so etwas gebaut, aber irgendwie ist meine Kombination bei der Spaltenauswahl falsch geworden.
Danke schön!
Betreff: Auswählen und Entfernen doppelter Zeilen mit BedingungIch habe einige Änderungen vorgenommen, um sie an meinen Tisch anzupassen. Danke!
Betreff: Auswählen und Entfernen doppelter Zeilen mit BedingungWenn Sie eine frühere Version von JMP haben, < möglicherweise nicht verfügbar. Versuchen Sie dann den folgenden Ansatz. Der Code sollte die doppelten Zeilen (basierend auf der Übereinstimmung von SerialNo und Section) mit dem frühesten Datum auswählen und löschen. Sortieren spielt keine Rolle.
dt = Current Data Table();
dt << select where(Col Max(:Date, :SerialNo, :Section) > :Date());
dt << delete rows();
Betreff: Auswählen und Entfernen doppelter Zeilen mit BedingungEs gibt eine aufgerufene Funktion
Wählen Sie „Doppelte Zeilen()“ aus.
Das kann hierfür verwendet werden, basiert jedoch auf der Suche nach Zeilen, die einer eindeutigen Zeile folgen.Daher muss die Tabelle vor Verwendung der Funktion umgekehrt sortiert werden.Nachfolgend finden Sie ein Beispielskript dafür.Da ich keine Beispieldatentabelle hatte, um dies auszuführen, wurde das Skript nicht getestet, es entspricht jedoch sehr gut Ihren Anforderungen.
Eine Dokumentation zur Funktion finden Sie im Scripting Index
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" );