Neue Spaltenformel mit JSLIch versuche, basierend auf Benutzereingaben eine neue Spaltenformel zu einer Tabelle hinzuzufügen. Die Eingabe kann entweder ein einzelner Wert oder eine Spaltenauswahl sein.
Ich habe mehrere Methoden ausprobiert, aber ich konnte keine finden, die dies austauschbar handhaben könnte.
Beispielskript, das ich unten ausprobiert habe.
Im Idealfall kann ich den Ausdruck „newcolexpr“ unabhängig von der Eingabe beibehalten. Das liegt hauptsächlich daran, dass ich versuche, eine benutzerdefinierte Formelspalte bereitzustellen, die viele Eingaben erfordert (z. B. >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));MassenanpassungQualitäts- und VerfahrenstechnikBetreff: 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))Vielen Dank jedoch für alle oben genannten Hinweise. Sie halfen.
Frohes Neues Jahr!
Betreff: Neue Spaltenformel mit JSLWie Sie dabei vorgehen, hängt 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 in einen anderen ein, indem Sie Eval Insert, Eval Expr, Parse und Substitute verwenden
Verwendung einer Spaltenliste in Formeln
Können Sie dies konstruieren, ohne den Ausdruck als Zeichenfolge zu schreiben?
Betreff: Neue Spaltenformel mit JSLHey @jthi Danke für die Antwort. Das habe ich mir auch gedacht, aber was ist, wenn ich mehr als eine Variable in der Formel berücksichtigen muss? Wird „nested-if“ dort die einzige Lösung sein (das versuche ich wirklich zu vermeiden)?
Ich frage mich, ob die Syntax eine Variable innerhalb von expr() verarbeiten kann, sodass ich eine Zahl oder NameExpr(asColumn()) basierend auf dem Eingabetyp zuweisen kann, bevor ich sie in den Ausdruck einsetze.
Betreff: Neue Spaltenformel mit JSLHöchstwahrscheinlich müssen Sie die Eingabe überprüfen und dann darauf basierend eine Spalte erstellen (Sie können dies innerhalb der Ausdruck-in-Formel überprüfen, aber auf diese Weise ist es klarer). Nachfolgend finden Sie 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;