Nuova formula di colonna con JSLSto cercando di aggiungere una nuova formula di colonna a una tabella basata sull'input dell'utente. L'input può essere un singolo valore o una selezione di colonna.
Ho provato un paio di metodi ma non sono riuscito a trovarne uno che potesse gestirlo in modo intercambiabile.
Script di esempio che ho provato di seguito.
Idealmente posso mantenere la stessa espressione "newcolexpr" indipendentemente dall'input. Ciò è dovuto principalmente al fatto che sto cercando di distribuire una colonna formula personalizzata che richiede molti input (ad esempio> 8 input)
Apprezzo l'aiuto.
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));Personalizzazione di massaQualità e ingegneria di processoRi: Nuova formula di colonna con JSLScusa per la risposta in ritardo. Grazie @jthi !
Ho scoperto che quanto segue funziona per quello che voglio fare:
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))Grazie per tutti i riferimenti sopra però. Loro hanno aiutato.
Buon Anno!
Ri: Nuova formula di colonna con JSLGli approcci su come affrontare questo dipende molto dalle variabili, dagli input e dalle formule che hai.
Altro esempio:
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));
Alcuni link:
Inserisci un'espressione in un'altra usando Eval Insert, Eval Expr, Parse e Substitute
Utilizzo dell'elenco di colonne nelle formule
Puoi costruirlo senza scrivere espressione come una stringa?
Ri: Nuova formula di colonna con JSLEHI @jthi Grazie per la risposta. Anch'io stavo pensando così, ma cosa succede se ho più di 1 variabile da considerare nella formula? Nidificato, se sarà l'unica soluzione lì (sto davvero cercando di evitarlo)?
Mi chiedo se la sintassi possa gestire una variabile all'interno di expr() in modo da poter assegnare un numero o NameExpr(asColumn()) in base al tipo di input prima di sostituirlo nell'espressione.
Ri: Nuova formula di colonna con JSLMolto probabilmente dovrai controllare l'input e quindi creare una colonna basata su quello (puoi controllare all'interno della formula Expr in, ma è più chiaro in questo modo). Di seguito è riportata un'opzione:
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;