if/then ステートメントの結果に基づいて新しい列を設定する必要がありますこんにちは。if/then ステートメントの結果に基づいて新しい列のグループを作成し、設定しようとしています。
ステップ1:
設定される新しい空の列を作成する必要があります。(全55枚)
(新しい列はそれぞれ数値の連続フィールドです。)
各列の名前は、グループ内の 55 個の化合物のそれぞれの名前の後に「_ppt」が付いているものに対応します。たとえば、「4:2 FTS」という名前の化合物は、[4:2 FTS_ppt] という名前の新しい列になります。
ステップ2:
グループ内の 55 の化合物のそれぞれに関連付けられた 3 つの既存の列を評価する if/then ステートメントを使用して、行ごとに新しい列を設定します。具体的には、
if [RES_VALUE_4:2 FTS] >= [RL_4:2 FTS] THEN [4:2 FTS_ppt] = [RES_VALUE_4:2 FTS]
[RES_VALUE_4:2 FTS] < [RL_4:2 FTS] AND DETECT_FLAG_4:2 FTS] = N AND [RL_4:2 FTS] <= 3 の場合、THEN [4:2 FTS_ppt] = 0.0009。
[RES_VALUE_4:2 FTS] < [RL_4:2 FTS] AND DETECT_FLAG_4:2 FTS] = N AND [RL_4:2 FTS] > 3 THEN [4:2 FTS_ppt] = NULL の場合。
以下に、複合名である接尾辞が付いた既存の列名を示します。JMP Pro 17.0を使用しています。



ご指導いただければ幸いです。
自動化とスクリプト作成コンテンツの構成Re: if/then ステートメントの結果に基づいて新しい列を設定する必要があります- ディスカッション コミュニティの目的は、JMP ユーザーが要求に応じてスクリプトを作成するための情報源ではありません。これは、ユーザーが JMP を学習するのを支援するためにあります。
- 提供した疑似コードを考えると、時間をかけて JMP スクリプト ガイドを読む必要があることは明らかです。これは、JMP の [ヘルプ] プルダウン メニューの JMP ドキュメント ライブラリから入手できます。
- 以下は、問題の解決に役立つ試みです。あなたのデータがないのでテストされていません。時間をかけてコードを勉強して学習してください。関数については、「Scripting Index」および「JSL Scripting Reference」に詳しく説明されています。
Names Default To Here( 1 );
groupList = {"RES_VALUE", "RES_TEXT", "DETECT_FLAG", "RL", "DILUTION_FACTOR"};
dt = Current Data Table();
// Find all of the different compounds. This is done by using the "RES_VALUE" columns
// and stripping off the compound names from each of them
compList = {};
For( i = 1, i <= N Cols( dt ), i++,
colName = Column( dt, i ) << get name;
If( Contains( colName, "RES_VALUE" ) == 1,
Insert Into( compList, Substr( colName, 11 ) )
);
);
// Create the columns
For Each( {comp, i}, compList,
Eval(
Parse(
"dt << New Column( \!"" || compList[i] || "_ppt" || "\!",
numeric,
continuous,
formula(
If( :\!"RES_VALUE "
|| comp || "\!"n >= :\!"RL " || comp || "\!"n,
x = :\!"RES_VALUE " || comp ||
"\!"n
);
If(
:\!"RES_VALUE " || comp ||
"\!"n < :\!"RL " || comp || "\!"n & :\!"DETECT_FLAG " || comp || "\!"n == \!"N\!" &
:\!"RL " || comp ||
"\!"n <= 3,
x = 0.0009
);
If(
:\!"RES_VALUE "
|| comp || "\!"n < :\!"RL " || comp || "\!"n & :\!"DETECT_FLAG " || comp || "\!"n == \!"N\!" &
:\!"RL "
|| comp || "\!"n > 3,
x = .
);
x;
)
);"
)
)
);
Re: if/then ステートメントの結果に基づいて新しい列を設定する必要がありますありがとうジム。はい、その点はよく理解されています。仕事に取り掛かる前に、JSL の基礎にもっと時間を費やす必要があります。
上記のコードはすべての列を正しく作成しましたが、数式は null 値 (「.」) のみを生成します。エラーのトラブルシューティングはできませんでしたが、引き続き試してみます。再度、感謝します。
Re: if/then ステートメントの結果に基づいて新しい列を設定する必要がありますサンプルデータを提供していただければ検討させていただきます。
Re: if/then ステートメントの結果に基づいて新しい列を設定する必要がありますありがとうジム。データセットの行の小さなサブセットを含む jmp テーブルを以下に添付しました。
Re: if/then ステートメントの結果に基づいて新しい列を設定する必要があります2 つの点を変更する必要がありました。
- 式で使用される変数 x の値は、行の実行ごとに初期化する必要があります。
- 式の実行は非抑制にする必要があります。
Names Default To Here( 1 );
groupList = {"RES_VALUE", "RES_TEXT", "DETECT_FLAG", "RL", "DILUTION_FACTOR"};
dt = Current Data Table();
// Find all of the different compounds. This is done by using the "RES_VALUE" columns
// and stripping off the compound names from each of them
compList = {};
For( i = 1, i <= N Cols( dt ), i++,
colName = Column( dt, i ) << get name;
If( Contains( colName, "RES_VALUE" ) == 1,
Insert Into( compList, Substr( colName, 11 ) )
);
);
// Create the columns
For Each( {comp, i}, compList,
Eval(
Parse(
"dt << New Column( \!"" || compList[i] || "_ppt" ||
"\!",
numeric,
continuous, formula(
x=.;
If( :\!"RES_VALUE "
|| comp || "\!"n >= :\!"RL " || comp || "\!"n,
x = :\!"RES_VALUE " || comp ||
"\!"n
);
If(
:\!"RES_VALUE " ||
comp || "\!"n < :\!"RL " || comp || "\!"n & :\!"DETECT_FLAG " || comp || "\!"n == \!"N\!" &
:\!"RL "
|| comp || "\!"n <= 3,
x = 0.0009
);
If(
:\!"RES_VALUE "
|| comp || "\!"n < :\!"RL " || comp || "\!"n & :\!"DETECT_FLAG " || comp || "\!"n == \!"N\!" &
:\!"RL "
|| comp || "\!"n > 3,
x = .
);
x;
)
);"
)
)
);
dt << Suppress Formula Eval( 0 );
Re: if/then ステートメントの結果に基づいて新しい列を設定する必要がありますジムさん、ありがとう。返信後すぐに返信するつもりでしたが、コードをダバッグしようとしていました。何らかの理由で機能しませんでした。デバッガーを使用すると、次のメッセージが表示されました。

皆さんからの意見を受け取りましたので、お知らせしておきたいのですが、引き続き努力していきます。ありがとう。
Re: if/then ステートメントの結果に基づいて新しい列を設定する必要があります
Re: if/then ステートメントの結果に基づいて新しい列を設定する必要がありますはい!ちょうど動作するようになりました。今回もご協力いただきありがとうございました!