Neue Spaltenformel mit JSLIch versuche, einer Tabelle basierend auf Benutzereingaben eine neue Spaltenformel hinzuzufügen. Die Eingabe kann entweder ein einzelner Wert oder eine Spaltenauswahl sein.
Ich habe einige Methoden ausprobiert, aber ich konnte keine finden, die dies austauschbar handhaben könnte.
Beispielskript, das ich unten ausprobiert habe.
Idealerweise kann ich den Ausdruck "newcolexpr" unabhängig von der Eingabe beibehalten. Dies liegt hauptsächlich daran, dass ich versuche, eine benutzerdefinierte Formelspalte bereitzustellen, die viele Eingaben erfordert (dh > 8 Eingaben).
Schätzen Sie die Hilfe.
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));SkriptingBetreff: Neue Spaltenformel mit JSLHöchstwahrscheinlich müssen Sie nach der Eingabe suchen und dann basierend darauf eine Spalte erstellen (Sie können dies in der Formel Expr überprüfen, aber auf diese Weise ist es klarer). Unten ist eine Option:
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;Betreff: Neue Spaltenformel mit JSLHallo @jthi Danke für die Antwort. Ich habe auch so gedacht, aber was ist, wenn ich mehr als 1 Variable in der Formel berücksichtigen muss? Wird nested-if die einzige Lösung dort sein (ich versuche wirklich, das zu vermeiden)?
Ich frage mich, ob die Syntax eine Variable innerhalb von expr() verarbeiten kann, sodass ich basierend auf dem Eingabetyp eine Zahl oder NameExpr(asColumn()) zuweisen kann, bevor ich sie in den Ausdruck einsetze.
Betreff: Neue Spaltenformel mit JSLAnsätze, wie Sie dies angehen können, hängen stark von den Variablen, Eingaben und Formeln ab, die Sie haben.
Anderes Beispiel:
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));
Einige Links:
Fügen Sie einen Ausdruck mit Eval Insert, Eval Expr, Parse und Substitute in einen anderen ein
Verwenden von Spaltenlisten in Formeln
Können Sie dies konstruieren, ohne den Ausdruck als String zu schreiben?
Betreff: Neue Spaltenformel mit JSLEntschuldigung für die späte Antwort. Danke @jthi !
Ich habe festgestellt, dass Folgendes für das funktioniert, was ich tun möchte:
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))Danke für den ganzen Hinweis oben. Sie halfen.
Frohes neues Jahr!