Tengo dos variables que se usan para definir 15 columnas en total. Son a = {"1", "2", "3", "4", "5"} y b = {"1", "2", "3"}. Actualmente hay 15 columnas que ya están creadas con la notación de Columna("11"), Columna("12"), Columna("13"), Columna("21"), también conocida como Columna(b[1] || a[1]), Columna(b[1] || a[2]), etc...
Promedié las primeras 6 filas de esas 15 columnas existentes y las coloqué en una matriz de tamaño 15. Llamé a esta matriz "ave".
Entonces ave[1] sería el promedio de las primeras 6 filas en Column("11"), ave[2] sería el promedio de las primeras 6 filas en Column("12"), etc...
Ahora, lo que me gustaría hacer es crear 15 columnas nuevas con el prefijo "D" usando matrices 'a' y 'b'. Además, tenga un conjunto de fórmulas para esas columnas que tome la columna existente: el promedio de 6 filas de esa columna.
Por ejemplo, la fórmula para Columna ("D11") sería la siguiente:
:Nombre("11") - promedio[1]
La columna ("D12") sería la siguiente:
:Nombre("12") - promedio[2]
Mi código:
index = 1;
For( i = 3, i > 0, i--,
For( j = 5, j > 0, j--,
at << Add Multiple Columns( "D" || b[i] || a[j], 1, numeric, continuous, );
F = Eval Expr(expr(ave[index]));
Column( "D" || b[i] || a[j] ) << Set Formula( :Name("11")-Name Expr(F) );
index = index + 1;
);
);
El código anterior no funciona cuando intento incrementar la variable de índice a través de los 15 valores promedio almacenados en "ave". El otro problema es que necesito iterar a través de :Name("11"), :Name("12"), etc. a través de todas las combinaciones de a & b en la fórmula. Casi necesito una forma de establecer la fórmula de la siguiente manera:
:Nombre(b[i] || a[i])
Sin embargo, :Name debe usar una cadena entre comillas y no le permitirá hacerlo de esa manera.
Probé varios métodos con parse, eval, etc. pero sin suerte.
¡Cualquier ayuda sería muy apreciada!
¡Gracias!
¡Eso funcionó maravillosamente! ¡Gracias!
Aquí hay una pieza de JSL que funcionará.Utiliza un método donde se genera la cadena de caracteres exacta de lo que debe ser el comando requerido, y luego Eval (Parse ()) para ejecutar el código
index = 1;
;
For( i = 3, i > 0, i--,
For( j = 5, j > 0, j--,
Eval(
Parse(
"at << New Column(\!"D" || b[i] || a[j] ||
"\!",1,numeric,continuous,Formula( :Name( \!""
|| Char( index + 10 ) || "\!" ) - " || Char( ave[index] ) || "));"
)
);
index = index + 1;
);
);