Re: usar lista de columnas en fórmulasHola @jthi ,
No estoy seguro de si esto es intencionado o no, pero definitivamente está relacionado con los corchetes de la lista, {} y la cantidad de elementos en la lista. Podría reproducir los mismos problemas que describió.
Creo que su solución para hacer Insertar en es la mejor opción. El Parse puede volverse muy complicado y difícil. Creo que tiene una buena solución con Insertar en y es mejor seguir con eso para evitar el problema de los corchetes de la lista.
DS
Re: usar lista de columnas en fórmulas¡Una vez más, la Cumbre de descubrimiento de JMP Meet the Experts cumple! Saltó a Secuencias de comandos para la sala de reuniones de Automation & Cust y @EvanMcCorkle tenía una solución mucho más limpia que mi inserción de bucle en y eval parse; s sustituyendo la Lista alrededor de listOfCols con ColSum:
listOfCols = {:height, :age, :sex}; //won't work here
f = Substitute(listOfCols, Expr(list), Expr(ColSum));
Show(f); //f = ColSum(:height, :age, :sex);No estoy seguro de si las funciones de Col Sum () funcionan con la lista de columnas, pero esta solución es limpia y simple.
Usando lista de columnas en fórmulasMe encontré con un "problema" al intentar utilizar directamente una lista de columnas devuelta desde el cuadro de diálogo de columnas (por ejemplo, {: sexo,: edad: nombre}). Cuando trato de usar esa lista directamente en las fórmulas Col (Col Mean, Col Sum ...) con byVars, la fórmula no funcionará correctamente. Usar la lista con, por ejemplo, la fórmula Sum () funciona bien. ¿Es este el comportamiento previsto y alguien tiene formas más limpias de construir Col Sums a partir de la lista de columnas que los ejemplos que tengo a continuación?
A continuación se muestra el script de ejemplo con fórmulas Sum () y ColSum (). Hay un par de formas diferentes en las que intenté construir las fórmulas ColSum () pero logré que funcionen solo con Insert Into con expresiones y EvalParse (que intentaré evitar debido a problemas con la depuración).
Ejemplo:
Nombres predeterminados aquí (1); dt = Open ("$ SAMPLE_DATA / Big Class.jmp"); dt << Nueva columna ("Suma", Numérico, "Continuo", Formato ("Mejor", 12), Fórmula (Suma (: altura,: peso))); listOfCols = {: altura,: peso}; // lista funciona aquí dt << New Column ("SumList", << Formula (Eval (Eval Expr (Sum (Expr (listOfCols)))))); dt << Nueva columna ("ColSum", Numérico, "Continuo", Formato ("Mejor", 12), Fórmula (Suma de columnas (: altura,: edad,: sexo))); listOfCols = {: altura,: edad,: sexo}; // no funcionará aquí dt << New Column ("ColSumList", << Formula (Eval (Eval Expr (Col Mean (Expr (listOfCols)))))); // tampoco funcionó dt << New Column ("ColSumList2", << Formula (Eval (Eval Expr (Col Mean (Expr (listOfCols [1]), Expr (listOfCols [2 :: 3])))))) ; Show (dt: sum << obtener fórmula); Show (dt: sumlist << obtener fórmula); Show (dt: colsum << obtener fórmula); Show (dt: colsumlist << obtener fórmula); Show (dt: colsumlist2 << obtener fórmula); // Insertar en con expresiones parece funcionar, actualmente la mejor opción formulaExpr = Expr (Col Sum ()); Para Cada ({valor}, listOfCols, Insertar en (formulaExpr, Name Expr (valor))); dt << nueva columna ("InsertIntoColSum", << Formula (Eval (EvalExpr (formulaExpr)))); Show (dt: InsertIntoColSum << obtener fórmula); // Siempre pude EvilParse, pero tratando de evitarlo si es posible Eval (Parse ("dt << New Column (\!" EvilParseColSumList \! ", << Formula (Col Sum ("|| Substitute (char (listOfCols), {" {","} "}," ") ||"))) ")); Show (dt: EvilParseColSumList << obtener fórmula) ;
Scripting