変数列リストを文字列として評価し、新しい列式に挿入する列名の文字列である変数を作成しました。これは FOR ループ内にあるため、ループごとに変化します。
これはデモンストレーション用のサンプルテーブルです。実際には、私のテーブルは奇妙な名前の約 400 列です。グループ化して最大値を報告する必要がある列をグループ化しようとしています。 99.9% の確率で、グループ化される「類似」列ごとに行ごとに 1 つの値しかありません。
| Col1 | Col2 | Col3 |
| 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 ) );