他のテーブルの列を参照する2 つのソース テーブルから読み取り、新しいテーブルを作成しようとしています。それらを 1 つの大きなテーブルに結合して、そこから操作することは避けたいと考えています。新しいテーブルは、2 つのソース テーブル間のデルタの配列になります。スクリプトは列を正常に作成していますが、列に何も入力していません。数式内の他のテーブルの列を参照する際に、いくつかの構文が欠落していると思われます。
predt = Open("C:\...\pre_data.jmp");
predtcols = predt << Get Column Names (string);
postdt = Open("C:\...\post_data.jmp");
postdtcols = postdt << Get Column Names (string);
dt = new table ("delta_values");
for (i=1, i <= NCols(predt), i++,
dt << New column ("delta_"||predtcols[i], numeric, continuous, formula(postdt:column(postdtcols[i]) - predt:column(predtcols[i])));
);データのブレンディングとクリーンアップRe: 他のテーブルの列を参照するそれは簡単に確認できます。 JMP の列ヘッダーをダブルクリックすると、[列情報] ウィンドウが開きます。 実際の列名がリストされます。Re: 他のテーブルの列を参照するExcel シート (テスターの出力) から列名をインポートしたので、列名に埋もれていると思います。
Re: 他のテーブルの列を参照する単位 (列プロパティとして定義) は列名の一部ではありません。
Re: 他のテーブルの列を参照するああ。列 2 以降のすべての列の名前に (xxx)、つまり測定単位が含まれているようです。それはあり得るでしょうか?ログはそのようなすべての列に対してエラーをスローしています
Re: 他のテーブルの列を参照するデータの問題だと思います。コードは 2 列のテスト ケースでは正常に機能しましたが、変数 "predt" で見つかった数の列を処理するように書かれています。
For( i = 1, i <= N Cols( predt ), i++,
したがって、行う必要があるのは、コードをステップ実行して変数値をチェックし、何が起こっているかを確認することです。あなたのデータがこのディスカッションに投稿されなければ、何が起こっているのかわかりません。
ログにメッセージが表示されていますか?
Re: 他のテーブルの列を参照する早速のご返事ありがとうございます!このスクリプトでは最初の 2 つの列の差分のみを取得しているようです。列は残りの列と同じ形式(数値、連続)なので、ここで何が起こっているのかわかりません。
Re: 他のテーブルの列を参照するあなたのお尻にバイト(駄洒落)を引き起こすような問題がいくつかありました。
- << Add Rows() を空のデータテーブルに追加する必要があります。
- Column() 関数を使用するための形式は postdt:column( postcols[i] ) ではありません。この状況で使用するメソッドの場合、形式は Column( postdt, postcols[i] ) になります。しかし、ここで必要なのはそれではありません
- New Column() 操作で数式を割り当てるのは少し難しいです。設定された Formula() は、式になる前に評価されません。つまり、postcols[i] を数式に配置すると、数式を構築するときに postcols[i] の値を検索せず、単に postcols[i] を数式に配置し、それを実行しようとします。数式が実行されるとき。これに関する問題は、変数「i」がループ内で何度も再割り当てされるため、JSL 内で「i」が変更されるたびに、変数「i」が参照されているすべての式が変更されることです。それはあなたが望んでいることではありません。したがって、必要なことは、必要なコードの正確な文字列を JSL で評価し、その JSL を実行して新しい列を作成することです。以下の修正された JSL でそれがわかります。
predt = data table("one");//Open( "C:\...\pre_data.jmp" );
predtcols = predt << Get Column Names( string );
postdt = data table("two");//Open( "C:\...\post_data.jmp" );
postdtcols = postdt << Get Column Names( string );
dt = New Table( "delta_values" );
dt << add rows(nrows(postdt));
For( i = 1, i <= N Cols( predt ), i++,
Eval(
Parse(
"dt << New Column( \!"delta_" || predtcols[i] || "\!",
numeric,
continuous,
formula( postdt:" ||
postdtcols[i] || "[Row()] - predt:" || predtcols[i] || "[Row()]) )'"
)
)
);
dt << delete columns("column 1");