Quiero definir una lista almacenada en una variable como nombres de columnas múltiples para leer en la columna Y del Generador de gráficos de control.Estoy pensando en cómo escribir un script JSL para lograr el título.
La versión de JMP utilizada es la 18.
dt02=current data table();
//列名を変数に
columnNames = dt02 << Get Column Names;
//3列目以降の列はすべてトレンドを確認するために必要
columnNames2={};
For( j = 3, j <= N Items( columnNames ), j++,
Insert Into( columnNames2, Column( columnNames[j] ) );
);
//X-bar_and_S_chart作成
grp01=dt02<<CONTROL chart="" builder=""></CONTROL><LINGO-LABS id="lingo-labs-825157" slang="ja-JP" mode="CREATE"><LINGO-LABEL>Automatización y scripting</LINGO-LABEL><LINGO-LABEL>Ventanas</LINGO-LABEL></LINGO-LABS>Re: Quiero definir una lista almacenada en una variable como nombres de columnas múltiples para leer en la columna Y del Generador de gráficos de control.Parece que el generador de gráficos de control quiere ser una de las plataformas difíciles de JMP. Con algo como esto, deberías poder hacer que todo funcione (incluso los más difíciles o molestos).
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
cont_cols = dt << Get Column Names("Continuous", String);
ys = Expr(Y());
For Each({colname}, cont_cols,
Insert Into(ys, Name Expr(AsColumn(dt, colname)));
);
Eval(Substitute(
Expr(ccb = dt << Control Chart Builder(
Variables(Subgroup(:age), _ycols_),
Show Control Panel(0),
Chart(Position(1), Limits(Sigma("Standard Deviation"), Spec Limits(1))),
Chart(Position(2), Points(Statistic("Standard Deviation")), Limits(Sigma("Standard Deviation"))),
Show Control Panel(0)
)),
Expr(_ycols_), Name Expr(ys)
));Re: Quiero definir una lista almacenada en una variable como nombres de columnas múltiples para leer en la columna Y del Generador de gráficos de control.¡Muchas gracias por el bonito código!
El problema quedó completamente resuelto, muchas gracias.
Para ser honesto, todavía no entiendo muy bien el código. . .
Creo que la imagen es que cada vez se realiza una sustitución sobre el array almacenado en ys, y el resultado se almacena en el gráfico de control. ¿Es correcto?
Re: Quiero definir una lista almacenada en una variable como nombres de columnas múltiples para leer en la columna Y del Generador de gráficos de control.In most of the platforms you could use Eval() with list of columns but in case of control chart builder it doesn't work and you have to have very specific format to make it work Y(:col, :col2). I build the correct format into ys, Y(:height, :weight) and then use Substitute to add to the Control Chart Builder message so it will be "forced" to evaluate correctly. You can see this if you remove Eval() outside of the Substitute() and run that

También puedes comprobar qué es ys usando Show(NameExpr(ys))
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
cont_cols = dt << Get Column Names("Continuous", String);
ys = Expr(Y());
For Each({colname}, cont_cols,
Insert Into(ys, Name Expr(AsColumn(dt, colname)));
);
Show(Name Expr(ys)); // Name Expr(ys) = Y(:height, :weight);
Re: Quiero definir una lista almacenada en una variable como nombres de columnas múltiples para leer en la columna Y del Generador de gráficos de control.o bien Eval(Sustituir(Expr(...)))
... o Eval(Eval Expr( Expr()...))
Consejos y trucos: mejores prácticas con JMP/JSL
Piense en Eval (Eval Expr( Expr()...)) como:
Busque Expr() y Eval Expr() ... antes de evaluar todo.
Desafortunadamente, los tres comienzan con E... , por lo que es un poco complicado recordarlos con el significado correcto.
La cuarta E... es Name Expr() - @jthi la usó en el bucle for para convertir las cadenas en columnas (:column) *)
... y necesitamos que obtenga Y(...) en lugar de un mensaje de error : )
*) Fortunately, Control Chart Builder accepts strings as alternative to columns.
De esta forma, se puede convertir directamente la lista de nombres de columnas en una Y() de nombres de columnas reemplazando el encabezado mediante
Sustituir en:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
tmp = dt << Get Column Names("Continuous", String);
Substitute Into(tmp, Expr(List()), Expr(Y()));
Eval(Eval Expr(
ccb = dt << Control Chart Builder(
Variables(Subgroup(:age), Expr(Name Expr(tmp))),
Show Control Panel(0),
Chart(Position(1), Limits(Sigma("Standard Deviation"), Spec Limits(1))),
Chart(Position(2), Points(Statistic("Standard Deviation")), Limits(Sigma("Standard Deviation"))),
Show Control Panel(0)
)
));