Hallo,
Ich muss per Skript eine neue Formelspalte erstellen, die Variablen für Spaltennamen und Konstanten verwendet.
Versuchte verschiedene Kombinationen von Expr, Eval, Parse, Eval Insert ohne Erfolg.
Siehe Beispiel.
Danke
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))));
);
Benutzen
for (i = 1, i <= ncols(dt), i++,
Wenn Sie innerhalb der For()-Schleife eine neue Spalte hinzufügen, endet die Schleife nie.Die ncols(dt) erhöht sich mit jeder Schleife um 1, und daher werde ich nie ncols(dt) erreichen;
Das Element „formel()“ einer Funktion „Neue Spalte()“ analysiert seinen Inhalt nicht, wenn er für die Spalte erstellt wird.Der Inhalt wird nur analysiert, wenn die Formel für jede Zeile ausgeführt wird.Daher können die Spalten- und Zeilenverweise Probleme verursachen, wenn diese Werte geändert werden.Der richtige Weg, damit umzugehen, besteht darin, die tatsächlichen Werte für Spalte und Zeile in die Formel einzusetzen, bevor die Formel erstellt wird.
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
)
);
);