変数を参照して列を呼び出すここでは完全な初心者ですが、
古い投稿では解決策が見つかりませんでしたが、
既存の列名を含む変数を作成しました。 他の 2 つの列のデータを合計する場合に、新しい列を作成したいと考えています (列を変数で呼び出します)。変数の使用法は、後で for ループで使用するためのものです。
助けてくれてありがとう!
以下のコードの場合:
dt = Current Data Table();
columnname1 = Column( dt, 1 ) << Get Name;
columnname2 = Column( dt, 2 ) << Get Name;
dt << New Column( "new_" || columnname1, Numeric , continuous, formula(column(dt, columnname1)+column(dt, columnname2)));
次のエラーが表示されます。
新しい列_列 1 2 式が中断されました
引数を数値 [または行列] に 1 回変換できません 行数: 2 演算: Add、Column( dt, 列名 1 ) + /*###*/Column( dt, 列名 2 ) /*###*/
数式評価エラーは無視されました
Column( "new_Column 1 2" )
高度な統計モデリングデータアクセスデータのブレンディングとクリーンアップデータの探索と視覚化Re: 変数を参照してカラムを呼び出す@txnelsonこれに関してはまったく正しいです。私が提案した方法は怠惰なオプションであり、後になって考えると、お勧めできるアプローチではありませんでした。正しい値を含む列が必要なだけの場合は、数式を使用せずにループ内で計算を実行できます。数式が重要である場合は、スクリプトが数式を正しくエンコードしていることを確認する必要があります。数値が正しく表示されるだけでは十分ではありません。スクリプト変数はスクリプトの存続期間を超えて保持されないため、数式には列参照が正しく含まれている必要があります。これは、Jim が説明したような式置換テクニックを使用することで実現されます。
Re: 変数を参照してカラムを呼び出す早々に返事をくれてありがとう。できます!
Re: 変数を参照してカラムを呼び出すこれを機能させるには、
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
columnname1 = Column( dt, 4 ) << Get Name;
columnname2 = Column( dt, 5 ) << Get Name;
dt << New Column( "new_" || columnname1,
Numeric,
continuous,
formula(
As Column( dt, columnname1 ) + As Column( dt, columnname2 )
)
);
ただし、これには潜在的な問題があります。保存された式は次のとおりです。

この式は、JMP セッションが続く限り機能し続けます。
- 変数 dt、columnname1、columnname2 が定義されています。データテーブルを保存して JMP をシャットダウンし、明日再び JMP を起動してデータテーブルを開いた場合はどうなるでしょうか。数式ではこれらの変数が見つからず、数式は失敗します。
- セッション内では、変数 dt、columnname1、columnname2 の値は変更されません。したがって、この列を作成し、その後のスクリプトで変数 columnname1 の値を変更する場合、JMP データ テーブルの式列は動的であるため、データ テーブルに変更が加えられると式が再実行されます。JMP変数の新しい値が使用され、数式列の新しい値が作成されます。
実際に行う必要があるのは、数式の実際の JSL 構文を作成するメソッドを使用することです。上記の例で、本当に必要なのは、式を次のようにすることです。
:height + :weight
以下の JSL はこれを行う 1 つの方法です。Substitute() 関数を使用して、実際の列名を数式に埋め込みます。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
columnname1 = Column( dt, 4 ) << Get Name;
columnname2 = Column( dt, 5 ) << Get Name;
Eval(
Substitute(
Expr(
dt << New Column( "new_" || columnname1,
Numeric,
continuous,
formula( __c1__ + __c2__ )
)
),
Expr( __c1__ ), Parse( ":" || columnname1 ),
Expr( __c2__ ), Parse( ":" || columnname2 )
)
);Re: 変数を参照してカラムを呼び出す列を参照する変数はすでに作成済みです。これらを数式で使用できますが、AsColumn 関数を使用する必要があります。
formula( AsColumn(columnname1) + AsColumn(columnname2) )
Re: 変数を参照して列を呼び出すこの質問を将来読む人のために:
上記のコードを使用して文字列の列名を数式に渡しましたが、
Parse(":" || column_name)「a - b」のような列名は、列「a」から変数「b」を引いたものとして解釈されるため、解析は奇妙な列名に対して脆弱です。
代わりに
As Name(columnname)
この問題は修正されます。