JSL-Skript zum Herausfiltern ganzer Zeilen, in denen eine bestimmte Spalte fehlende Werte enthältLiebe Community,
Ich bin ein Anfänger und möchte Sie um Ihre freundliche Hilfe bei meinem folgenden Code bitten. Das Argument der Funktion „fehlt“ scheint falsch zu sein.
Ich möchte, dass das Skript eine Tabelle anzeigt, in der Zeilen angezeigt werden, die Werte in bestimmten Bereichen enthalten. Außerdem sollen die Zeilen mit leeren Zellen in den beiden für die Filterung verwendeten Spalten ausgeschlossen werden.
Hier ist der Code:
dt = Current Data Table(); // Assumes you have a data table already opened
// Convert Column1 to numeric data type
dt << As Numeric("Temperatur");
// Convert Column2 to numeric data type
dt << As Numeric("Menge");
// Create the conditions to filter the rows
condition1 = Column(dt, "Temperatur") << Get Values() > 25;
condition2 = Column(dt, "Menge") << Get Values() > 0;
// Create a condition to remove empty cells
condition3 = Any(Is Missing(dt << Get Values("Temperatur"))) == 0 | Any(Is Missing(dt << Get Values("Menge"))) == 0;
// Apply all three conditions to filter the data table
filtered_dt = dt << Select Where(condition1 & condition2 & condition3);
// Show the filtered data table
filtered_dt << Show();
Vielen Dank im Voraus für die Navigation. Ich verwende JMP Version 17
Michael
Automatisierung und SkripterstellungBetreff: JSL-Skript zum Herausfiltern ganzer Zeilen, in denen eine bestimmte Spalte fehlende Werte enthältHallo Michael.
Das Coole an JMP: Sie müssen keine Skriptkenntnisse haben, sondern können einfach die GUI und Ihre Maus verwenden.
Nachdem Sie die Schritte ausgeführt haben, können Sie dann zum erweiterten Protokoll gehen und den Code überprüfen ...
- Zeilen/Zeilenauswahl/Wo auswählen (Strg + W)

- Datenansicht für ausgewählte Zeilen öffnen:

- Überprüfen Sie das Protokoll:

Jmp versteht, was Sie wollen – und kombiniert sogar die beiden Schritte in einer einzigen Codezeile:

Wenn Sie den Befehl selbst erstellen möchten, können Sie einige Zeichenfolgen definieren, diese verketten und dann den endgültigen Code analysieren und auswerten:
cond1 = "Is Missing( :age )";
cond2 = ":age > 16";
Eval(Parse("dt << Select where( "|| cond1 || " | " || cond2 || " ) << Data View;"))
Mein Vorschlag: Investieren Sie etwas Zeit, um Expression Handling zu erlernen und zu verstehen
Ein tolles Tutorial: Using JSL to Develop Efficient, Robust Applications (EU 2018 415) von @joseph_morgan
Sie werden sehen, eigentlich ist es Ihrem Ansatz ziemlich ähnlich:
Speichern Sie einige Bedingungen als JSL-„Symbole“ Bedingung 1, Bedingung 2 ... und verwenden Sie sie dann, um Ihren endgültigen Ausdruck zu erstellen und ihn auszuwerten.
Mit einigen Codekorrekturen und hier und da Expr() und Name Expr() (um zu verhindern, dass Jmp die Bedingungen auswertet, bevor sie in die letzte Codezeile eingefügt werden können) sollte der Code wie folgt aussehen:
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
condition 1 = Expr(Is Missing( :age ));
condition 2 = Expr(:age > 16 );
combined condition=Expr(or());
Insert into(combined condition, Name Expr(condition1));
Insert into(combined condition, Name Expr(condition2));
Eval(Substitute(dt << Select where( _cond_ ) << Data View),
Expr(_cond_),Name Expr(combined condition)));
Betreff: JSL-Skript zum Herausfiltern ganzer Zeilen, in denen eine bestimmte Spalte fehlende Werte enthältSie kombinieren Matrixvergleich und Auswahl aus einer Datentabelle. In diesem Fall möchten Sie höchstwahrscheinlich einfach entweder << Select Where oder << Get Rows Where und nicht << Get Values verwenden (vielleicht möchten Sie stattdessen << Get Rows Where verwenden). von << Wo auswählen, aber das hängt davon ab, was Sie tun möchten).
Sie können die Bedingungen direkt in einer einzigen Select Where-Anweisung kombinieren (wenn Sie sie trennen möchten, würde ich das mit Kommentaren tun, es sei denn, Sie möchten genau dieselben Anweisungen wiederverwenden).
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
dt[[1 2 3 20 30], "height"] = .;
dt[[10 15 16 30], "weight"] = .;
// Comparison
dt << Select Where((:height > 60) & (:weight > 90));
selrows = dt << get selected rows; // to get a matrix of selected row numbers
r = dt << Get Rows Where((:height > 60) & (:weight > 90));
und die Suche nach diesen fehlenden Werten ist in diesem Fall unnötig
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
dt[[1 2 3 20 30], "height"] = .;
dt[[10 15 16 30], "weight"] = .;
// Comparison
r1 = dt << Get Rows Where((:height > 60) & (:weight > 90) & (!IsMissing(:height) | !Is Missing(:weight)));
r2 = dt << Get Rows Where((:height > 60) & (:weight > 90));
r1 == r2;Betreff: JSL-Skript zum Herausfiltern ganzer Zeilen, in denen eine bestimmte Spalte fehlende Werte enthältVielen Dank, Hogi, mit deiner Hilfe habe ich es zum Laufen gebracht!
Betreff: JSL-Skript zum Herausfiltern ganzer Zeilen, in denen eine bestimmte Spalte fehlende Werte enthältVielen Dank, Jthi, mit deiner Hilfe habe ich es zum Laufen gebracht!