Entfernen Sie Zeilen mit einem oder mehreren leeren Werten mithilfe von JSL<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ich habe eine Tabelle, in der jede Zeile einen einzelnen Messtyp bei drei Temperaturen enthält, die jeweils in einer eigenen Spalte gespeichert sind. Letztendlich möchte ich die Deltas zwischen diesen Messungen berechnen und diese Daten dann in einer neuen Tabelle stapeln. Allerdings werden nicht alle Messungen bei allen drei Temperaturen durchgeführt, und ich muss diejenigen Messungen (Zeilen) ausschließen, bei denen eine oder mehrere Datenspalten leer sind. Ich muss dies mit einem JMP 9.0-Skript tun.
Gegeben:
dtSplit =
| Messung | T1 | T2 | T3 |
|---|
| Messung A | 5 | 12 | 89 |
| Messung B | 13 | | 8 |
| Messung C | | 52 | 57 |
| Messung D | 22 | 21 | |
| Messung E | 8 | | |
| Messung F | | | 15 |
| Messung G | | 54 | |
Ich muss Folgendes produzieren:
dtClean =
| Messung | T1 | T2 | T3 |
|---|
| Messung A | 5 | 12 | 89 |
Ich habe versucht, etwas zu verwenden wie:
dtSplit << Select Where(
Is Empty(:T1) ||
Is Empty(:T2) ||
is Empty(:T3)
) << Delete Rows;
Allerdings wählt jede Select Where(Is Empty(:COL))-Anweisung immer alle Zeilen aus.
Ich bin mir sicher, dass mir etwas Einfaches fehlt. Ihre Hilfe wird sehr geschätzt, danke.
- Matt
Betreff: Zeilen mit einem oder mehreren leeren Werten mithilfe von JSL entfernenHallo
Danke für die Eingabe. Ich habe mir das von Ihnen empfohlene Muster für fehlende Daten angesehen und es funktioniert irgendwie, aber nicht vollständig.
In meiner Datentabelle hat jeder Name 4 verschiedene Zeilen. Jede der 4 Zeilen eines Namens ist das Ergebnis eines Tests (Sensor, Maske, EVM und Leistung).
In meinem Datentabellenbeispiel besteht Gerät A den ersten Test „Sens“ nicht und besteht den 2., 3. und 4. Test. Da Gerät A „Sens“ nicht besteht, handelt es sich um ein ausgefallenes Gerät, obwohl es den 2., 3. und 4. Test besteht.
Wenn ich Tables==>Missing Data Pattern verwende, werden die 2., 3. und 4. Zeile von A gelöscht. Was ich nicht suche. Ich möchte 4 Zeilen jedes Namens löschen, wenn keine Daten darauf vorhanden sind (keine Daten bei 10 MHz, 20 MHz, 30 MHz und 1000 MHz). In meiner Datentabelle werden die Namen C, G, H, I, JK und N gelöscht.
Vielen Dank für Ihre Hilfe
Betreff: Zeilen mit einem oder mehreren leeren Werten mithilfe von JSL entfernenSie müssen sich die Plattform „Missing Data Pattern“ ansehen bilden.Dadurch können Sie alle Zeilen identifizieren, in denen alle Werte fehlen, und dann können Sie die Zeilen löschen usw.
Tabellen==>Fehlendes Datenmuster
Betreff: Zeilen mit einem oder mehreren leeren Werten mithilfe von JSL entfernenHALLO
Dies ist mein erster Beitrag und ich bin mir nicht sicher, ob die angehängte Excel-Datei durchgeht oder nicht. Wenn nicht,
Ich füge auch das PNG der Beispieldatendatei bei
Ich bin JMP-Neuling (ich verwende JMP 14) und benötige Hilfe beim Zeilenlöschskript.
Meine Datentabelle enthält Daten von vielen verschiedenen Geräten, wobei jedes Gerät getestet wird
vier verschiedene Fehler (Empfindlichkeit, Maske, EVM und Leistung) über einen weiten Frequenzbereich
von 10 MHz bis 1000 MHz. Passende Geräte sind diejenigen, die für alle vier leere Zellen „“ haben
Testen Sie über Frequenzbereiche hinweg und ich möchte sie aus der Datentabelle entfernen.
(Löschen Sie die grünen Zeilen der angehängten Excel-Datei – Geräte C, G, H, I, J, K und N)
1. Problem: So löschen Sie leere Zeilen (mit Spalten 10 MHz bis 1000 MHz = leer)
Der folgende Befehl, den ich gefunden habe, ist ähnlich, aber nicht nützlich, da ich 100 verschiedene Spalten und „und“ habe.
Sie alle auszuprobieren, ist ziemlich langwierig und nicht skalierbar, wenn wir uns später dazu entschließen, die Häufigkeit zu erhöhen
über 1000 MHz
dtsplit << Select Where(Fehlt(:T1) | Fehlt(:T2) | fehlt(:T3)) << Zeilen löschen;
Ich habe auch diesen Befehl ausprobiert:
For( i = 2, i <= 101, i++,
dtSplit << select where( Is Missing( Column( i )[] ) ) << Zeilen löschen
);
Dieser Befehl gibt mir eine Fehlermeldung:
Im folgenden Skript ist der Fehler mit /*###*/ markiert.
dt = Aktuelle Datentabelle();
For( i = 2, i <= 100, i++,
dtSplit/*###*/ < );
2. Problem: Gelöschte Zeilen müssen ein Vielfaches von 4 sein, da jedes Gerät viermal getestet wird.
Ich bin mir nicht ganz sicher, wie ich das machen soll
Ich würde mich sehr über Ihre Hilfe hierzu freuen
Danke
new_2_JMP
Betreff: Zeilen mit einem oder mehreren leeren Werten mithilfe von JSL entfernenWenn Sie nur eine einzelne Zelle überprüfen:
if ( Is Missing( Column( dt,"Value" )[7] ),
dt << delete rows([7]);
);
Betreff: Zeilen mit einem oder mehreren leeren Werten mithilfe von JSL entfernenIhr Code prüft nur Zeile 7. Sie müssen jede Zeile testen
dt << select where( Is Missing( Column( dt,"weight" )[row()] ) ) << delete rows;
Betreff: Zeilen mit einem oder mehreren leeren Werten mithilfe von JSL entfernenHallo,
Ich versuche, ein wenig das Gleiche zu tun.
Ich muss prüfen, ob eine Zelle leer ist, und dann die Zeile löschen, wenn ja.
Ich habe Folgendes versucht:
dt << select where( Is Missing( Column( dt,"Value" )[7] ) ) << delete rows;
Es werden jedoch alle Zeilen in der Tabelle gelöscht.
Auf der Suche nach Ideen.
Betreff: Zeilen mit einem oder mehreren leeren Werten mithilfe von JSL entfernenTolle Diskussion. Wir hatten ein ähnliches Problem, bei dem wir beim Importieren von Sensordateien viele leere Zeilen am Ende der Datei hatten. Wir wollten Zeilen entfernen, in denen sich keine Sensordaten befanden. Ich wollte jedoch keine Zeilen entfernen, in denen noch einige Informationen vorhanden waren.Das Folgende wurde in JMP14 geschrieben, geht aber davon aus, dass es für frühere Versionen funktionieren wird. Ich weiß, dass es in JMP14 Zeilenauswahl > Doppelte Zeilen auswählen gibt. Es konnte jedoch keine ähnliche Funktion gefunden werden, die alle numerischen Spalten in einer Zeile summiert. Im folgenden Skript würde Sum() in der gesamten Zeile der Matrix null zurückgeben, aber ich wollte eine Null. Es wurde festgestellt, dass die Ausgabe von V Sum() für alle Nullen 0 zurückgibt. Damit es funktioniert, musste lediglich der Zeilenvektor in einen Spaltenvektor transponiert werden.Dies funktioniert unabhängig davon, wie viele numerische Spalten Sie haben, solange diese alle leer sind. Bin immer noch interessiert, ob jemand eine bessere Lösung hat.
dt = Current Data Table();
// Get all numeric data
m = dt << Get As Matrix;
// for each row, test if the V Sum is 0 or non-zero
// V Sum returns 0 for all null
// Sum() returns null for all null
rowlist = {};
For(i= N Rows(m), i>=1,i--,
If(V Sum(Transpose(m[i,0]))[1] == 0,
Insert Into(rowlist,i)
)
);
dt << Delete Rows(rowlist);Betreff: Zeilen mit einem oder mehreren leeren Werten mithilfe von JSL entfernenDie Verwendung des Verkettungsoperators war ein Übertragungsfehler – alte Gewohnheiten lassen sich nur schwer aussterben.
Es stellte sich heraus, dass das Problem darin lag, dass meine Spaltennamen, die eigentlich „88“, „95“ und „105“ waren, alle Zeilen mit Is Missing(:88) ausgewählt haben.
dtsplit << Select Where(Is missing(:Name("T1")) | Is missing(:Name("T2")) | is missing(:Name("T3"))) << Delete Rows;
Funktioniert super.
Betreff: Zeilen mit einem oder mehreren leeren Werten mithilfe von JSL entfernenSie haben den String-Verkettungsoperator || verwendet anstelle des OR-Operators |.Wie MS gezeigt hat, müssen Sie die Funktion „Ist fehlt“ und nicht „Ist leer“ verwenden.Ihr Code wird zu:
dtsplit << Select Where(Is missing(:T1) | Is missing(:T2) | is missing(:T3)) << Delete Rows;
Betreff: Zeilen mit einem oder mehreren leeren Werten mithilfe von JSL entfernenEntschuldigung, ich habe die JMP9-Anforderung verpasst. Die Funktion Loc Nonmissing() scheint in JMP 10 neu zu sein, sodass die oben genannten Funktionen in JMP 9 nicht funktionieren.
Hier ist ein alternativer Ansatz, der in JMP 9 funktioniert und Ihrem Code ähnelt, jedoch eine Schleife verwendet.
For( i = 2, i <= 4, i++,
dtSplit << select where( Is Missing( Column( i )[] ) ) << delete rows
);
Betreff: Zeilen mit einem oder mehreren leeren Werten mithilfe von JSL entfernenDies kann auf unterschiedliche Weise erreicht werden. Für numerische Spalten sind häufig Matrixfunktionen wirksam.
Hier ist ein Beispiel für das Löschen aller Zeilen mit fehlenden Zellen in den Spalten 2, 3 und 4:
keeprows = Loc Nonmissing( dtSplit << get as matrix( {2, 3, 4} ) );
dtSplit << select rows( keeprows ) << invert Row Selection << delete rows;
Hier ist ein alternativer Ansatz, der eine Teilmenge der Spalten ohne fehlende Zellen erstellt (wobei die ursprüngliche Tabelle unverändert bleibt):
dtClean = dtSplit << Clear Column Selection() << subset( rows( Loc Nonmissing( dt << get as matrix( {2, 3, 4} ) ) ) );Betreff: Entfernen Sie Zeilen mit einem oder mehreren leeren Werten mithilfe von JSLDieses Skript beginnt nach der Spalte mit dem Titel „Namen“ mit der Arbeit und fährt bis zum Ende der Tabelle fort, wobei leere Zeilen gelöscht werden.
// Get the current data table
dt = Current Data Table();
// Get all column names as strings
cnmes = dt << Get Column Names("string");
// Initialize Start and End indices
Start = .;
End = N Items(cnmes);
// Find the index of the "Device 2" column
For(k = 1, k <= N Items(cnmes), k++,
If(Contains(cnmes[k], "Names"),
Start = k + 1;
Break(); // Exit loop once found
);
);
// Loop through the columns from Start to End and delete rows with missing values
For(i = Start, i <= End, i++,
dt << Select Where(Is Missing(Column(i)[])) << Delete Rows;
);