別のテーブルのすべての列に数式を適用するにはどうすればよいですか?テーブルを取得して、すべての列のすべての関数に移動平均を適用しようとしています。以下のスクリプトは、ここで別のスレッドで見た内容に基づいて試したものです。目標は、新しいテーブルを作成し、元のテーブルを参照しながら関数を適用することです。ただし、スコープ データ テーブル アクセス エラーが引き続き発生します。
Test = Open("C:\Users\abrokaw\Desktop\JMP MA Test Table.jmp"); //open value data table
Testcols = Test << Get Column Names( string ); //get column names
TestMA = New Table( "Test Table Smoothed" ); //make new table
TestMA << add rows(nrows(Test)); //make new table match rows with raw table
For( i = 1, i <= N Cols( Test ), i++,
Eval(
Parse(
"TestMA << New Column( \!"MA_" || Testcols[i] || "\!",
numeric,
continuous,
formula( test:" ||
Testcols[i] || "Col Moving Average( :Value, 1, 2, 2 ) ) )'"
)
)
);
TestMA << delete columns("column 1");
自動化とスクリプト基本的なデータ分析とモデリングRe: 別のテーブルのすべての列に数式を適用するにはどうすればよいですか?テスト テーブル内の列への参照を間違った場所に配置しました。また、書式の使用から各値の設定に変更しました。最終的な計算は同じですが、列は数式列ではありません。これにより、新しいデータ テーブルはテスト テーブルから独立します。また、For() ループの終了値も変更しました。前後に 2 行が含まれているため、nrows-2 を超えて計算することはできません。
names default to here(1);
Test = Open( "$SAMPLE_DATA/blood pressure.jmp" ); //open value data table
Testcols = Test << Get Column Names( string, continuous ); //get column names
TestMA = New Table( "Test Table Smoothed" ); //make new table
TestMA << add rows( N Rows( Test ) ); //make new table match rows with raw table
For( i = 1, i <= N Cols( Test )-2, i++,
Eval(
Parse(
"TestMA << New Column( \!"MA_" || Testcols[i] ||
"\!",
numeric,
continuous,
set each value( Col Moving Average( test:" || Testcols[i] || ", 1, 2, 2 ) ) )"
)
);
);
TestMA << delete columns( "column 1" );
最後に、プレビュー画面の上部にある JSL アイコンを使用してコードを入力してください。これにより、読みやすくなります。
このコードは実際にはEval(Parse())コードの複雑さを必要としません。オープンコードを使用するだけで済みます。
Names Default To Here( 1 );
Test = Open( "$SAMPLE_DATA/blood pressure.jmp" ); //open value data table
Testcols = Test << Get Column Names( string, continuous ); //get column names
TestMA = New Table( "Test Table Smoothed" ); //make new table
TestMA << add rows( N Rows( Test ) ); //make new table match rows with raw table
For( i = 1, i <= N Cols( Test ) - 2, i++,
TestMA << New Column( "MA_" || Testcols[i],
numeric,
continuous,
set each value( Col Moving Average( test:Testcols[i], 1, 2, 2 ) )
)
);
TestMA << delete columns( "column 1" );
Re: 別のテーブルのすべての列に数式を適用するにはどうすればよいですか?サブセットを使用して列をコピーすることもできます(これによりテーブルスクリプトなどもコピーされますが、これは利点にも問題にもなり得ます)。サブセットオプションを選択し、計算に数式列を使用する場合は、数式のコピー(0)を使用することを忘れないでください。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
cont_cols = dt << Get Column Names(string, continuous);
ma_cols = {};
For(i = 1, i <= N Items(cont_cols), i++, // could use For Each but I try to avoid ... Each loops nowadays
//Eval(EvalExpr()) isn't necessary here but makes debugghing much easier
new_col = Eval(EvalExpr(
dt << New Column("MA_" || cont_cols[i], Numeric, Continuous, Formula( // I also try to avoid Set Each Value in cases like this so I use Formula here
Col Moving Average(Expr(NameExpr(AsColumn(dt, cont_cols[i]))), 1, 2, 2)
));
));
Insert Into(ma_cols, new_col << get name);
);
dt_new = dt << Subset(All Rows, Columns(ma_cols), Copy Formula(0), Output Table("Moving Averages"));
dt << Delete Columns(ma_cols);Re: 別のテーブルのすべての列に数式を適用するにはどうすればよいですか?ありがとう、ジム。この変更は、私が作成したテスト データ セットでは機能します。ただし、実際のデータ セットでも同じエラー メッセージが表示される問題が発生しています。実際のデータ セットからテスト セットに列名をコピーすると、同じエラーが発生するため、列名に関係があると思います。この問題の原因となる特定の文字が列名に含まれていますか?