JSLを使用した新しい列式ユーザー入力に基づいて、新しい列の数式をテーブルに追加しようとしています。 入力は、単一の値または列の選択のいずれかです。
いくつかの方法を試してきましたが、これを交換可能に処理できる方法を見つけることができませんでした。
以下で試したサンプルスクリプト。
理想的には、入力に関係なく「newcolexpr」式を同じに保つことができます。 これは主に、多くの入力(つまり、8を超える入力)を受け取るカスタム数式列を展開しようとしているためです。
ヘルプに感謝します。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
//when selection is a single value
//desired outcome: a new column "Test" with formula (1*5)
selection = {1};
newcolexpr = expr(
dt << new column("Test", formula(expr(selection[1])*5))
);
eval(eval expr(newcolexpr));
//when selection is a column (e.g. "height")
//desired outcome: a new column "Test" with formula ("height"*5)
selection = {"height"};
newcolexpr = expr(
dt << new column("Test", formula(expr(selection[1])*5))
);
eval(eval expr(newcolexpr));スクリプティングRe:JSLを使用した新しい列式ほとんどの場合、入力を確認してから、それに基づいて列を作成する必要があります(式のExpr内で確認できますが、この方法の方が明確です)。 以下は1つのオプションです。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
new_col_expr = Expr(
cur_sel = selection[1];
show(cur_sel);
If(IsNumber(cur_sel),
Eval(EvalExpr(dt << New Column("Test", Numeric, Formula(Expr(cur_sel)*5))));
,
Eval(EvalExpr(dt << New Column("Test", Numeric, Formula(Expr(NameExpr(AsColumn(cur_sel)))*5))));
);
);
selection = {1};
new_col_expr;
selection = {"height"};
new_col_expr;Re:JSLを使用した新しい列式おい@jthi返信ありがとうございます。 私もこのように考えていましたが、数式で考慮すべき変数が複数ある場合はどうなりますか? ネストされます-そこにある唯一の解決策である場合(私は本当にそれを避けようとしています)?
式に代入する前に、入力タイプに基づいて数値またはNameExpr(asColumn())を割り当てることができるように、構文がexpr()内の変数を処理できるかどうか疑問に思います。
Re:JSLを使用した新しい列式これにどのようにアプローチするかについてのアプローチは、あなたが持っている変数、入力、および式に大きく依存します。
その他の例:
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
formula_expr = Expr(Expr(dt << New Column("Test", Numeric, Formula(placeholder*5))));
selection = {1};
Eval(Substitute(formula_expr, Expr(placeholder), selection[1]));
selection = {:height};
Eval(Substitute(formula_expr, Expr(placeholder), selection[1]));
formula_expr2 = Expr(Expr(dt << New Column("Test", Numeric, Formula(Sum(placeholder)))));
selection = {1,3};
Eval(Substitute(formula_expr2, Expr(placeholder), selection));
selection = {:height, :weight};
Eval(Substitute(formula_expr2, Expr(placeholder), selection));
formula_expr3 = Expr(Expr(dt << New Column("Test", Numeric, Formula(Col Sum(placeholder)))));
selection = {:height, :age, :sex};
Eval(Substitute(formula_expr2, Expr(placeholder), selection));
いくつかのリンク:
Eval Insert、Eval Expr、Parse、およびSubstituteを使用して、ある式を別の式に挿入します
数式で列のリストを使用する
式を文字列として記述せずにこれを構築できますか?
Re:JSLを使用した新しい列式返事が遅くなってごめん。 ありがとう@jthi !
私がやりたいことには、次のことがうまくいくことがわかりました。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
new_col_expr = expr(
dt << new column("Testing",formula(t1+t2+3))
);
Selection1 = {1,5};
if(Selection1[1] == 1,
Substitute into(new_col_expr,
expr(t1),
Selection1[2]
),
Selection1[1] == 0,
Substitute into(new_col_expr,
expr(t1),
Nameexpr(ascolumn(Selection1[2]))
)
);
Selection2 = {0,"weight"};
if(Selection2[1] == 1,
Substitute into(new_col_expr,
expr(t2),
Selection1[2]
),
Selection2[1] == 0,
Substitute into(new_col_expr,
expr(t2),
Nameexpr(ascolumn(Selection2[2]))
)
);
eval(evalexpr(new_col_expr))しかし、上記のすべての参照に感謝します。 彼らが助けました。
あけましておめでとう!