Divide tu problema en partes más pequeñas. Comience con algo muy simple como (mi sintaxis podría no funcionar para JMP14 ya que estoy usando JMP17)
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Variability Data/2 Factors Crossed.jmp");
yname = "namechange";
col_name = "Measurement";
var_chart = Variability Chart(
Y(Transform Column(yname, Formula(colname))),
X(:Operator, :part#)
);
Ya puede obtener sus problemas con este tipo de secuencia de comandos, pero es mucho más fácil probar con algo como esto.
Con un script como este, lo más probable es que recurra al uso de Eval(EvalExpr()) porque me permite hacer algo como lo siguiente (puedo ver la expresión que se evaluará si solo ejecuto la parte EvalExpr())

Si usa Transformar solo para cambiar el nombre de la columna del eje Y, puede haber opciones más fáciles que usar Transformar columna.
Después de que esa parte funcione, es hora de comenzar a abordar los filtros o escalar, pero no los haga al mismo tiempo.
Gracias por la respuesta. Ya he validado individualmente todos los demás componentes del código, por lo que no me preocupaba la complejidad adicional.
El primer fragmento de código que publicaste no funciona en JMP14. El mensaje de error es "Una columna de Por grupo no tiene datos porque todas las filas tienen valores faltantes o están excluidas.
Encontré una solución ajustando la llamada a la función del gráfico de variabilidad con Eval(EvalExpr()) y luego ajustando el nombre de la columna dentro de la transformación en Expr(Name Expr(AsColumn())).
Lo siguiente funcionará en JMP 14
Names Default To Here( 1 );
dt = Open(
"$SAMPLE_DATA/Variability Data/2 Factors Crossed.jmp"
);
yname = "namechange";
col_name = "Measurement";
Variability Chart(
Y( Transform Column( yname, Formula( as column(col_name)) ) ),
X( :Operator, :part# )
);
Muy simplemente, estoy intentando modularizar algunos gráficos de variabilidad. En total, hay 3 o 4 parámetros diferentes para los que quiero trazar estos gráficos, por lo que necesito pasar una clave a la función para indicarle qué columna trazar y dejar que configure un manejo específico de esa columna. Es decir, qué tipo de transformación debe sufrir esa columna como parte de la operación de trazado.
La forma en que comencé es pasar una cadena y luego usar un conjunto de condicionales para especificar el nombre de la columna que se transformará (colname) y luego la cadena que se aplicará a la transformación (yname).
Probé varios métodos para hacer esto y no importa qué solución use, no puedo hacer que el gráfico funcione correctamente. Codificar la Y del gráfico de variabilidad siempre funciona correctamente para los filtros dados, así que sé que hay datos presentes, pero parece que no puedo seleccionarlos usando mi enfoque de variables. Esto es lo que he probado para la línea Y del gráfico var hasta ahora:
- Y( Transformar columna( yname, Fórmula( Columna(colname) ) ) ),
- Alerta JMP: Argumento no válido (cuadro de diálogo)
- El grupo no tiene datos porque a todas las filas les faltan valores o están excluidas (ventana de registro)
- Y( Transformar columna( yname, Fórmula( Columna(dt,colname) ) ) ),
- Alerta JMP: Argumento no válido (cuadro de diálogo)
- El grupo no tiene datos porque a todas las filas les faltan valores o están excluidas (ventana de registro)
- Y( Transformar columna( yname, Fórmula( Columna( Como columna(colname)) ) ) ),
- Alerta JMP: columna sin resolver 256 veces (cuadro de diálogo)
- "Argumento no válido 256 veces. Una columna o grupo no tiene datos porque a todas las filas les faltan valores o están excluidas (registro)
- Y( Transformar columna( yname, Fórmula( Columna( Como columna(dt,colname)) ) ) ),
- Alerta JMP: El acceso a la tabla de datos con alcance requiere una columna o variable de la tabla de datos 256 veces (cuadro de diálogo)
- Argumento no válido 256 veces. Una columna o grupo no tiene datos porque a todas las filas les faltan valores o están excluidas (registro)
- Y( Transformar columna( yname, Fórmula( Como columna(colname) ) ) ),
- Alerta JMP: columna sin resolver 267 veces (cuadro de diálogo)
- (sin errores de registro)
- Y( Transformar columna( yname, Fórmula( Como columna(dt,colname) ) ) ),
- Alerta JMP: El acceso a la tabla de datos con alcance requiere una columna o variable de la tabla de datos 267 veces (cuadro de diálogo)
- (sin errores de registro)
Si no es obvio en mis intentos, todavía no me queda claro cuál es la diferencia entre As Column() y Column(). He visto soluciones en foros con ambos, así que las probé todas y no llegué a ninguna parte. La única pista que veo es que cuando As Column() se usa de forma independiente, obtengo un número diferente de violaciones de acceso (267) en comparación con el caso en el que está envuelto por Column() (256). Sé que 267 es el número "correcto" de filas que devolverá ese filtro porque codificar el nombre de la columna en la fórmula de transformación traza correctamente 267 filas.
Además, he intentado configurar la variable colname directamente en la columna (colname = :R y colname = ":R") y varias combinaciones para usarlas directamente y/o envolverlas en combinaciones de Column() y As Column() funciona también sin éxito.
¿Alguien puede ver lo que estoy haciendo mal aquí?
Nota: Este código exacto no se ha probado, los nombres de var se han genérico.
//
// Build plot functions
//
var_chart = Function( {dutname, ytype, stressname, bias, ver},
{chart, ax_min, ax_max, ax_step, len, colname, yname},
<BR /> ax_min = 0;<BR /> ax_max = 1;<BR /> ax_step = 0.1;<BR />
If(ytype == "r", (colname = "R"; yname = "R [Ω]"));<BR /> If(ytype == "l", (colname = "L"; yname = "L [H]"));<BR /> If(ytype == "c", (colname = "C"; yname = "C [F]"));
If(stressname == "s1", len = 1.1);
If(stressname == "s2", len = 2.2);
If(stressname == "s3", len = 3.3);
chart = Variability(
Y( Transform Column( yname, Formula( As Column(colname) ) ) ),
X( :X1, :X2, :X3, :X4 ),
Analysis Type( "Choose best analysis (EMS REML Bayesian)" ),
Std Dev Chart( 0 ),
Points Jittered( 1 ),
Show Box Plots( 1 ),
<<SET scale=""></SET>