Hola a todos
Lo hice una vez, y fue doloroso, pero perdí el guión y el recuerdo de eso. Debajo de lo que estoy tratando de hacer:
Tweak_List = dt_Temp << Obtener nombres de columnas ("String");
for(i = 1, i <= N Elementos(Tweak_List),i++,
a = Izquierda(Tweak_List[i], Longitud(Tweak_List[i]) - 1) || "Δ";
b = Ajustar_Lista[i];
c = Izquierda(Tweak_List[i], Longitud(Tweak_List[i]) - 2);
dt << Nueva columna (Izquierda (Tweak_List [i], Longitud (Tweak_List [i]) - 1) || "Δ", Numérico, Continuo, Fórmula (if (:name1 == :name2, c - b, 0))));
);
En dt tengo columnas llamadas ColName_2 y ColName, Tweak_List es la lista de nombres de columnas como ColName_2.
Necesito crear una nueva columna Delta llamada ColName_ Δ para cada par y tiene la fórmula ColName - ColName_2 en ella se cumple una condición.
Recuerdo que estaba trabajando con Eval and Co, pero se me olvidó. Por favor ayúdame
Y como de costumbre, finalmente obtuve una solución, me sentí libre de reproducir con un guión más eficiente.
For(i = 1, i <= N Items(Tweak_List), i++,
Eval(
Eval Expr(
dt << New Column(Left(Tweak_List[i], Length(Tweak_List[i]) - 1) || "Δ",
Numeric,
"Continuous",
Formula(
If(:ENTITY == :ENTITY_2,
As Column(Expr(Char(Left(Tweak_List[i], Length(Tweak_List[i]) - 2)))) - As Column(Expr(Char(Tweak_List[i]))),
0
)
)
)
)
);
);
Podría usar Word() o Words() en lugar de Left().
Names Default To Here(1);
dt = New Table("Untitled 143",
Add Rows(1),
Compress File When Saved(1),
New Column("Column1", Numeric, "Continuous", Format("Best", 12), Set Values([1])),
New Column("Column1_2", Numeric, "Continuous", Format("Best", 12), Set Values([2])),
New Column("Column2", Numeric, "Continuous", Format("Best", 12), Set Values([3])),
New Column("Column2_2", Numeric, "Continuous", Format("Best", 12), Set Values([4]))
);
tweaklist = {"Column1_2", "Column2_2"};
For Each({col_name}, tweaklist,
Eval(EvalExpr(
dt << New Column(Word(1, col_name, "_") || "_Δ", Numeric, Continuous, Formula(
Expr(Name Expr(As Column(col_name))) - Expr(Name Expr(As Column(Word(1, col_name, "_"))))
));
));
);
Además, si no necesita la fórmula sino solo los valores, puede usar << Establecer cada valor que no necesita una evaluación tan pesada
For Each({col_name}, tweaklist,
dt << New Column(Word(1, col_name, "_") || "_Δ", Numeric, Continuous, << Set Each Value(
As Column(col_name) - As Column(Word(1, col_name, "_"))
));
);