特定の列に欠損値が含まれている行全体をフィルタリングする 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 スクリプト本当にありがとう、Jthi。あなたの助けのおかげで、走ることができました!
Re: 特定の列に欠損値が含まれている行全体をフィルターする JSL スクリプトありがとう、ホギさん、あなたの助けで走りきりました!
Re: 特定の列に欠損値が含まれている行全体をフィルターする JSL スクリプトマトリックスの比較とデータ テーブルからの選択を混在させている場合、この場合は、<< Select Where または << Get Rows Where のいずれかを使用し、<< Get Values は使用しない方がよいでしょう (<< Select Whereではなく<< Get Rows Whereを使用することもできますが、これは実行したい内容によって異なります)。
条件を 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 スクリプトこんにちは、ミハル。
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) 、 @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)));