JSL-Skript zum Herausfiltern ganzer Zeilen, bei denen eine bestimmte Spalte fehlende Werte enthältLiebe Community,
ich bin ein Anfänger und würde mich über Ihre freundliche Hilfe bei meinem folgenden Code freuen. Das Argument der Funktion „is missing“ 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 Spalten, die zum Filtern verwendet werden, 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 SkriptingBetreff: JSL-Skript zum Herausfiltern ganzer Zeilen, bei denen eine bestimmte Spalte fehlende Werte enthältVielen Dank, Jthi, mit deiner Hilfe habe ich es zum Laufen gebracht!
Betreff: JSL-Skript zum Herausfiltern ganzer Zeilen, bei 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, bei denen eine bestimmte Spalte fehlende Werte enthältSie vermischen Matrixvergleich und Auswahl aus der Datentabelle. In diesem Fall möchten Sie höchstwahrscheinlich entweder „<< Wo auswählen“ oder „<< Zeilen abrufen wo“ verwenden und nicht „<< Werte abrufen“ (vielleicht möchten Sie „<< Zeilen abrufen wo“ anstelle von „<< Wo auswählen“ verwenden, 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 Überprüfung auf fehlende Werte 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, bei denen eine bestimmte Spalte fehlende Werte enthältHallo Michal.
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 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 die beiden Schritte sogar zu 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 die Ausdrucksbehandlung zu lernen und zu verstehen
Ein großartiges Tutorial: Verwenden von JSL zur Entwicklung effizienter, robuster Anwendungen (EU 2018 415) von @joseph_morgan
Sie werden sehen, dass es Ihrem Ansatz tatsächlich ziemlich ähnlich ist:
Speichern Sie einige Bedingungen als JSL-„Symbole“, Bedingung 1, Bedingung 2 … und verwenden Sie sie dann, um Ihren endgültigen Ausdruck zu konstruieren und auszuwerten.
Mit einigen Codekorrekturen und Expr() und Name Expr() hier und da (um zu verhindern, dass Jmp die Bedingungen auswertet, bevor sie in die letzte Codezeile eingefügt werden können) sollte der Code folgendermaßen 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)));