So sortieren Sie Spalten und löschen wiederholte Zeilen<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich bin neu in der Skripterstellung in JMP und möchte die Tabelle der Toolfehler filtern. Ich habe einen Datensatz und möchte nach Alarmdatum filtern und anschließend die wiederholten Fehlerzeilen löschen. Wenn beispielsweise um 1:00 Uhr ein Fehler auftritt und er sich innerhalb einer Stunde viermal wiederholt, möchte ich die Wiederholungen löschen und nur dann abfangen, wenn der Fehler zum ersten Mal auftritt.
Mein Skript ist unten und ich möchte das Skript umsortieren, nachdem ich wiederholte Zeilen nach Alarmdatum (absteigend) gelöscht habe.
dt = open ("SR_Loop_LAM_002_Alarm_Log.csv");
dt << sort (by (:ENTITY), sort (aufsteigend), Tabelle ersetzen (0));
für (i = nrows (dt), i>0, i--,
if(:ENTITY[i-1]==:ENTITY & :ALARM_ID[i-1] == :ALARM_ID & Datumsdifferenz(:ALARM_DATE[i-1], :ALARM_DATE , „Stunde“, „Bruchzahl“) < 1,
dt << Zeilen löschen (i))
);
dt << save ("SR_Loop_LAM_002_Alarm_Log.csv");
schließen (dt, kein Speichern)
Betreff: So sortieren Sie Spalten und löschen wiederholte ZeilenVielen Dank euch allen für die tolle Resonanz! Ich habe mein Skript bearbeitet und es funktioniert jetzt wunderbar.
Betreff: So sortieren Sie Spalten und löschen wiederholte ZeilenHallo Evan,
Es gibt eine Reihe von Möglichkeiten, wie Sie das Problem umgehen können.Bei der Entfernung von Duplikaten besteht eine besondere Herausforderung darin, dass Sie „Duplikate“ entfernen möchten, die innerhalb einer Stunde nach demselben Alarm auftreten.Dies erfordert eine Verzögerungsfunktionslogik, die wiederum erfordert, dass die Daten vor der Ausführung entsprechend geordnet werden.Wenn Sie außerdem eine Zeile löschen, bevor die nächste Logik ausgeführt wird, kann es bei der Schleife zu Fehlern kommen, die außerhalb der Grenzen liegen.Eine Problemumgehung besteht darin, ein Flag für die Entfernung von Duplikaten zu setzen. Dies kann durch Erstellen einer booleschen Spalte oder durch die Verwendung einiger integrierter Funktionen erfolgen.Unten habe ich Ihren Code geändert, um die Zeilenauswahl als Flag zu verwenden.Nachdem die Logik ausgeführt wurde, um festzustellen, ob es sich bei dem Alarm um ein Duplikat handelt, werden alle Zeilen auf einmal gelöscht.Für noch mehr Geschwindigkeit sorgt das Öffnen der Tabelle im unsichtbaren Modus, sodass Bildschirm-E/A vermieden werden.
/* Datentabelle unsichtbar gemacht, um die Ausführung zu beschleunigen */
dt = Offen ( „SR_Loop_LAM_002_Alarm_Log.csv“ , unsichtbar ) ;
/* für Mehrfachsortierung aktualisiert */
dt << Sortieren ( Von ( : JURISTISCHE PERSON , : ALARM_DATUM ) , Befehl ( Aufsteigend , Aufsteigend ) , Tabelle ersetzen ( 0 ) ) ;
/* Zuerst die Zeilen- und Spaltenauswahl löschen (nur eine gute Programmiergewohnheit) */
dt << Deaktivieren Sie „Auswahl“. ;
dt << Spaltenauswahl löschen ;
/* Zeilen auswählen, die die angegebenen Bedingungen erfüllen
Da dies von unten nach oben verläuft, sollte die Schleife bei Zeile 1 enden (es gibt keine Zeile 0).
*/
Für ( ich = N Zeilen ( dt ) , ich > 1 , ich --,
Wenn (
: JURISTISCHE PERSON [ ich - 1 ] == : JURISTISCHE PERSON [ ich ] &
: ALARM_ID [ ich - 1 ] == : ALARM_ID [ ich ] &
Datumsunterschied ( : ALARM_DATUM [ ich - 1 ] , : ALARM_DATUM [ ich ] , "Stunde" , „Bruchteil“ ) < 1 ,
dt << Wählen Sie Zeilen aus ( ich )
)
) ;
/* die ausgewählten Zeilen löschen */
dt << Zeilen löschen ;
/* endgültige Sortierung */
dt << Sortieren ( Von ( \ : ALARM_DATUM ) , Befehl ( De schimmernd ) , Tabelle ersetzen ( 0 ) ) ;
dt << speichern ( „SR_Loop_LAM_002_Alarm_Log_cleansed.csv“ ) ;
Schließen ( dt , kein Speichern ) ;
Betreff: So sortieren Sie Spalten und löschen wiederholte ZeilenHi evanchen870
Schauen Sie sich diese Diskussion aus der Vergangenheit an. Das Skript ist auch sehr schnell und robust beim Löschen, da es „Zeilen abrufen, wo“ verwendet.
Betreff: Stoppen Sie eine Schleife
viel Glück!
Betreff: So sortieren Sie Spalten und löschen wiederholte ZeilenWenn Sie die Funktion Lag() verwenden, erhalten Sie keine Fehlermeldung.
lat(ENTITY ) zeigt auf die gespeicherte Spalte (Zeile) als ENTITY[i-1]
Betreff: So sortieren Sie Spalten und löschen wiederholte ZeilenDanke für die schnelle Antwort, Ian, aber das Skript macht immer noch nicht das, was ich möchte.
Derzeit habe ich die Spalten ENTITY, ALARM_DATE, ENTITY_TYPE, ALARM_ID und ALARM_DESCRIPTION
1. Ich möchte zunächst, dass mein Skript entweder nach ENTITY, ALARM_DATE oder ENTITY_TYPE sortiert wird
2. Dann möchte ich eine if-Schleife verwenden, um wiederholte Alarme (durch ALARM_DESCRIPTION) innerhalb einer Stunde Zeitdifferenz zum ALARM_DATE zu löschen
3. Zuletzt möchte ich nach ALARM_DATE (absteigend) sortieren, um die ursprüngliche Tabelle zu ersetzen
Aufgrund Ihrer Vorschläge muss ich also ändern (i = nrows (dt), i>1, i--)?
Betreff: So sortieren Sie Spalten und löschen wiederholte ZeilenSieht so aus, als wärst du fast da. Ihre „for“-Schleife endet beim Wert von i=1, aber Sie indizieren i-1=0. JMP-Indizes beginnen immer bei 1.
Betreff: So sortieren Sie Spalten und löschen wiederholte ZeilenDer aktuelle JMP-Fehler ist „Ungültige Zeilennummer beim Zugriff oder bei der Auswertung von ‚subscript‘, „ENTITY[i-1]““