こんにちは、
列名と定数の変数を使用して、スクリプトで新しい数式列を作成する必要があります。
Expr、Eval、Parse、Eval Insert のさまざまな組み合わせを試しましたが、無駄でした。
サンプルを参照してください。
ありがとう
row = 11;
col = "foo";
for (i = 1, i <= ncols(dt), i++,
dt << New Column( "ratio " || char(i), numeric,
formula(( column(col) - column(col)[row] ) / (Col Max(col) - Col Min(col))));
);
使用する
for (i = 1, i <= ncols(dt), i++,
For() ループ内に新しい列を追加すると、ループが終了しなくなります。ncols(dt) はループごとに 1 ずつ増加するため、i は ncols(dt) に到達しません。
New Column() 関数の Formula() 要素は、列用に作成されるため、その内容を解析しません。数式が行ごとに実行されるときにのみ内容が解析されます。したがって、列参照と行参照は、それらの値が変更されると問題を引き起こす可能性があります。これを処理する適切な方法は、数式を作成する前に、col と row の実際の値を数式に代入することです。
Names Default To Here( 1 );
dt =
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
Open( "$SAMPLE_DATA/Big Class.jmp" );
row = 11;
col = "height";
stop = n cols(dt);
For( i=1, i<= stop, i++,
Eval(
Substitute(
Expr(
dt << New Column( "ratio " || Char( i ),
numeric,
formula( (As Column( _col_ ) - As Column( _col_ )[_row_]) / (Col Max( As Column( _col_ ) ) - Col Min( As Column( _col_ ) )) )
)
),
Expr( _col_ ), col,
Expr( _row_ ), row
)
);
);