<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich habe versucht, einen Weg zu finden, Zeilen zu entfernen, die identische Zellen in einigen Spalten haben, aber nicht in anderen.
Zum Beispiel möchte ich Zeilen finden, in denen die Werte für die Spalten PartNo, SerialNum und Site identisch sind, jedoch nicht Customer und Value. Dann möchte ich eine dieser Zeilen löschen. Im
In diesem Fall würde ich mit den Reihen 1,3 und 4 übrig bleiben - siehe unten.
Vielen Dank
| Teil Nr | Seriennummer | Seite? ˅ | Kunde | Wert |
|---|
| 1 | 2 | 3 | ein | 1,5 |
| 1 | 2 | 3 | b | 2 |
| 3 | 4 | 5 | c | 3 |
| 2 | 3 | 4 | d | 5 |
| 2 | 3 | 4 | e | 6 |
Wenn Sie dies mithilfe von Skripts tun möchten, zeigt der folgende Code ein Beispiel, in dem nur die erste Instanz einer doppelten Zeile beibehalten wird. Dabei wird die Tatsache ausgenutzt, dass die Übersichtstabelle mit der Detailtabelle verknüpft ist.
// Beispieldaten
dt1 = Öffnen ( "$ SAMPLE_DATA / Big Class.jmp" ) ;
// Mit welchen Spalten werden Duplikate definiert?
keyCols = { "Alter" . "Sex" } ;
// Eine unsichtbare, verknüpfte Übersichtstabelle erstellen, dt2
dt2 = dt1 << Zusammenfassung ( Gruppe ( Eval ( keyCols )) . Unsichtbar ) ;
// Schleife über die Zeilen von dt2 ...
rows2Keep = [] ;
zum ( r = 1 . r <= NRows ( dt2 ) . r ++
// ... wähle jede Reihe nacheinander aus
dt2 << SelectRows ({ r }) ;
// Finde die entsprechenden Zeilen in dt1
duplicateRows = dt1 << GetSelectedRows ;
// Behalte nur den ersten
rows2Keep = VConcat ( rows2Keep . duplicateRows [ 1 ]) ;
// Entferne die aktuelle Auswahl
dt2 << ClearSelect ;
) ;
Schließen ( dt2 . NoSave ) ;
// Löschen Sie die Zeilen in dt1, die Duplikate sind
rows2Delete = ( 1 :: NRow ( dt1 )) ";
rows2Delete [ rows2Keep ] = [] ;
dt1 << DeleteRows ( rows2Delete ) ;
Hallo,
Sie können Join verwenden, um die Tabelle mit sich selbst zu verknüpfen, die Spalten Teilenummer, Seriennummer und Site abzugleichen und Vielfache zu löschen. So würde der Join-Dialog für diesen Fall aussehen.
Hoffentlich hilft das!