Hallo,
Ich versuche, alle Zeilen mit dem Wert 1 in der Spalte „Verstoß“ auszuwählen, den Wert der Spalte „Gerät“ zu extrahieren und dann alle mit diesen Geräten verknüpften Zeilen auszuschließen.Kann mir jemand bei der Erstellung eines Skripts helfen?Danke!
Unten finden Sie ein Skript, das diese Aktion ausführt
Names Default To Here(1);
dt = Current Data Table();
dt << Clear Row States;
violation_rows = dt << Get Rows Where(:Violation == 1);
violation_devices = Associative Array(dt[violation_rows, "Device"]) << get keys;
dt << Select Where(Contains(violation_devices, :Device)) << Exclude(1) << Clear Select;
- Zeilennummern abrufen, wobei :Violation == 1 ist
- Verwenden Sie die Subskription der Datentabelle und das assoziative Array, um die Geräte abzurufen
- Wählen Sie Zeilen mit diesen Geräten aus und schließen Sie sie aus
Sie können dies auch ganz einfach interaktiv tun (und dies wird durch ein erweitertes Protokoll aufgezeichnet):
- Erstellen Sie eine Übersichtstabelle mit „Gerät“ als Gruppe und „Verstoß“ als Untergruppe. Stellen Sie außerdem sicher, dass die Tabellen verknüpft sind
- Wählen Sie 0 Werte aus N(1) aus (zeigt an, wo Validierung == 1 ist) und klicken Sie dann mit der rechten Maustaste auf die Zeilen, um die Auswahl umzukehren
- Jetzt haben Sie die Geräte in Ihrer Haupttabelle ausgewählt
- Sie können diese Zeilen jetzt ausschließen
JMP erstellt Ihnen ein Skript wie dieses
// Open Data Table: Sample(1).jmp
// → Data Table("Sample(1)")
Open("$DOWNLOADS/Sample(1).jmp");
// Data table summary
// → Data Table("Sample(1) By (Device)")
Data Table("Sample(1)") << Summary(Group(:Device), N, Subgroup(:Violation), Freq("None"), Weight("None"));
// Select matching cells
Data Table("Sample(1) By (Device)") << Select Where(:"N(1)"n == 0);
// Invert current selection
Data Table("Sample(1) By (Device)") << Invert Row Selection;
// Toggle selected rows' exclude state
Data Table("Sample(1) By (Device)") << Select Where(:"N(1)"n == 0) << Invert Row Selection << Exclude;
// Close Data Table: Sample(1) By (Device)
Close(Data Table("Sample(1) By (Device)"), NoSave);
und mit einigen kleinen Änderungen wird es in Zukunft ein ziemlich robustes Skript sein, das verwendet werden kann (verwenden Sie Variablen anstelle von Tabellennamen, beginnen Sie mit Names Default To Here(1)... um einige Änderungen zu erwähnen).
Danke für die schnelle Antwort. Du hast mir gerade den Tag versüßt!