特定の列に欠損値が含まれる行全体をフィルタリングするための JSL スクリプト親愛なるコミュニティの皆様
私は初心者ユーザーなので、次のコードについて親切な助けを求めたいと思います。 「is missing」関数の引数が間違っているようです。
スクリプトで、特定の範囲の値を含む行が表示される表を表示したいと考えています。また、フィルタリングに使用される 2 つの列に空のセルがある行は除外されます。
コードは次のとおりです。
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();
ナビゲーションをしていただき、誠にありがとうございます。 JMPバージョン17を使用しています
マイケル
自動化とスクリプト作成Re: 特定の列に欠損値が含まれる行全体をフィルタリングするための JSL スクリプトこんにちは、マイケル。
JMP の優れた点は、スクリプトの知識がまったく必要なく、GUI とマウスだけを使用できることです。
次に、手順を実行した後、詳細ログに移動してコードを確認できます。
- 行/行選択/場所を選択 (Ctrl + W)

- 選択した行のデータ ビューを開きます。

- ログを確認します。

Jmp はユーザーが何を望んでいるのかを理解し、2 つのステップを 1 行のコードに結合することもできます。

コマンドを独自に構築したい場合は、いくつかの文字列を定義して連結し、最終コードを解析して評価します。
cond1 = "Is Missing( :age )";
cond2 = ":age > 16";
Eval(Parse("dt << Select where( "|| cond1 || " | " || cond2 || " ) << Data View;"))
私の提案:式の処理を学び、理解するために時間を投資してください。
素晴らしいチュートリアル: JSL を使用した効率的で堅牢なアプリケーションの開発 (EU 2018 415) by @joseph_morgan
実際、これはあなたのアプローチと非常によく似ていることがわかります。
いくつかの条件を JSL "シンボル" 条件 1、条件 2 ... として保存し、それらを使用して最終的な式を構築し、評価します。
コードをいくつか修正し、随所にExpr()とName Expr()を加えた (コードの最終行に組み込む前に Jmp が条件を評価しないようにするため) コードは次のようになります。
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)));
Re: 特定の列に欠損値が含まれる行全体をフィルタリングするための JSL スクリプト行列の比較とデータ テーブルからの選択を混合しています。この場合、<< Get Values ではなく、<< Select Where または << Get Rows Where のいずれかを使用する必要がある可能性が高くなります (代わりに<< Get Rows Whereを使用することもできます) of << [場所を選択します。ただし、これは何をしたいかによって異なります)。
条件を 1 つの Select Where ステートメントに直接結合できます (条件を分離したい場合は、まったく同じステートメントを再利用したくない場合を除き、コメントを使用します)。
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));
この場合、それらの欠損値をチェックする必要はありません
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;Re: 特定の列に欠損値が含まれる行全体をフィルタリングするための JSL スクリプトホギさん、本当にありがとうございました。あなたの助けでなんとか実行することができました。
Re: 特定の列に欠損値が含まれる行全体をフィルタリングするための JSL スクリプトJthi さん、本当にありがとうございました。あなたの助けで無事に実行することができました。