変数列リストを文字列として評価し、新しい列式に挿入する列名の文字列である変数を作成しました。これは FOR ループ内にあるため、ループごとに変化します。
これはデモンストレーション用のサンプルテーブルです。実際には、私のテーブルには奇妙な名前が付けられた約 400 列があります。グループ化する必要がある列をグループ化し、最大値を報告しようとしています。 99.9% の確率で、グループ化される「類似」列ごとに、行ごとに値が 1 つだけ存在します。
| 列1 | 列2 | 列3 |
| 22 | | |
| | 22 | |
| | | 32 |
| | 32 | |
| 1 | | |
| | | 56 |
| | 34 | |
この最初の部分は、変数列リストを生成するループです。すべてのコードはここにありませんが、要約は次のとおりです。これは機能するので、この議論を行き詰まらせたくありません。
VarCols = functional code here and the output is a string with this format: {"col1", "col2", "col3"}
次に、私のコードは、「VarName」という名前の新しい列(ループの別の部分で定義)を作成し、VarCols にある列の最大値を報告する数式を挿入することになっています。しかし、それを評価してもらうことはできません。私のこのやり方は間違っているのでしょうか?
DT << New Column(VarName, Numeric, "Continuous", formula(Maximum(columns(eval(VarCols)))));
混乱を避けるために変数列名を挿入しましたが、具体的なエラーは次のとおりです。
列 VarName の式が中断されました
名前が未解決: 列 1 回 行数: 2 操作: 列、列( Eval( VarCols) ) /*###*/
数式評価エラーは無視されました
Re: 変数列リストを文字列として評価し、新しい列の式に挿入する「TheExpr」の値を入力してください
Re: 変数列リストを文字列として評価し、新しい列の式に挿入する長年のファン。 質問に回答してもらうために実際に投稿する必要があるのは初めてです。
これは素晴らしい。 コード内で同じポイントに到達することができました。 次のステップでは、この文字列を新しい列の関数に挿入します。
dt << New Column( "MinValue", numeric, continuous, Formula( min(Eval( Parse( TheExpr)))));
しかしそれは私にはうまくいきません。 助けていただければ幸いです。
無視してください。 今夜遅くまで脳が働いていませんでした...
Re: 変数列リストを文字列として評価し、新しい列の式に挿入するうまくいきました、ありがとう@txnelson
Re: 変数列リストを文字列として評価し、新しい列の式に挿入する別のコミュニティ メンバーがより効率的なコードを持っている可能性がありますが、私ならあなたのリクエストをどのようにコード化するかを以下に示します。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
VarCols = {"NPN1", "PNP2", "NPN2"};
VarName = "NewCol";
// Create the JSL required to generate the new column
theExpr = "DT << New Column(VarName, Numeric, Continuous, formula(Maximum(:" || VarCols[1];
For( i = 2, i <= N Items( VarCols ), i++,
theExpr = theExpr || ",:" || VarCols[i]
);
theExpr = theExpr || ")));";
// Run the generated JSL
Eval( Parse( theExpr ) );