Hola expertos de JMP,
De alguna manera creo que mi publicación acaba de ser eliminada, publícala de nuevo.
Tengo una tabla DOE con muchas fórmulas predichas, estas fórmulas tienen una relación de eje X, Y
Me gustaría reorganizar la tabla de datos en el siguiente formato para poder dibujar un gráfico de superficie (X, Y, Valor) para ver cómo cambia a medida que cambio el parámetro.

Dos cuestiones:
1. Puedo obtener fórmulas y luego concatenarlas al siguiente formato si (fila == 1, fórmula 1, si (fila == 2, fórmula 2, ...... etc.)
Pero eventualmente la fórmula es un carácter largo con "", necesito eliminar manualmente "' para que la fórmula funcione.
2. Utilizo el cuadro de lista H para obtener el valor y configuro cada fila para cambiar los parámetros, de modo que pueda ver cómo cambia el gráfico de superficie. Pero lo ideal sería usar la barra de desplazamiento para cambiar el parámetro y así poder ver los cambios más fácilmente.
dt = data table("example DOE table");
dt2 = current data table();
colname = dt << get column names();
colnamelist = {};
formulalist = {};
loopword = char("If( Row() == ");
mid = char("");
final = char("");
//Get column names with predicted formula
for (i = 1, i <= N items(colname),i++,
pos = Contains (colname[i], "Pred F");
if(pos == 1 , insert into(colnamelist, colname[i]), continue())
);
//Get formula from columns and save into list
for each({colval}, colnamelist,
eval(evalexpr(
formula = Char(Expr(Name Expr(As Column(dt,colval))) << get formula());
));
insert into (formulalist, formula)
);
//Concat formulas to below format: If( row == 1, Formula 1, If( row ==2, Forumla 2, If( row == 3, formula 3)))......etc
for (i=1, i <= N rows() , i++,
mid = mid || loopword || char(i) || ", " || char(formulalist[i]) || ", "
);
final = mid || char("0");
for (i=1, i <= N rows() , i++,
final = final || char(")")
);
eval(evalexpr(
:height << set formula(expr(final))
));
nw = New Window( "process paramaeter setting",
H List Box( Text Box( " Input Parameter A " ), A = Number Edit Box() ),
H List Box( Text Box( " Input Parameter B " ), B = Number Edit Box() ),
H List Box( Text Box( " Input Parameter C " ), C = Number Edit Box() ),
H List Box( Text Box( " Input Parameter D " ), D = Number Edit Box() ),
Button Box( "OK",
theA = A << get;
theB = B << get;
theC = C << get;
theD = D << get;
:Parameter A << set each value(theA);
:Parameter B << set each value(theB);
:Parameter C << set each value(theC);
:Parameter D << set each value(theD);
//Somehow the column with formula cannot draw into surface plot directly, so I have to copy and paste value to anohter column to draw
newheight = :height << get values;
:newheight<< set values(newheight);
)
)
Parece que necesita usar cuadros deslizantes para su entrada, en lugar de cuadros de edición de números
Gracias Jim, lo que estoy buscando es un cuadro deslizante.
Pero una cosa más, creo un cuadro de botón para obtener el valor del cuadro del control deslizante y luego configuro cada valor para cambiar las filas. ¿Es posible hacer que la fila cambie en tiempo real como el control deslizante, sin un botón de verificación adicional?
Value = 0;
New Window( "Example",
Panel Box( "Parameter setting",
tb = Text Box( "Parameter A: " || Char( Value ) ),
sb = Slider Box( 0, 1, Value, tb << Set Text( "Value: " || Char( Value ) ) ),
Button Box( "OK",
:Parameter A << set each value(Value)
)
)
);
Lo encontré, un simple parse() puede resolver mi primera pregunta.
seval(evalexpr(
:height << set formula(expr(parse(final)))
));
Pero para la segunda pregunta, sería muy bueno si pudiéramos tener una barra de desplazamiento para establecer cada valor para que el usuario pueda revisar fácilmente cómo cambia el mapa 3D a medida que cambia el parámetro.
busque en el índice de secuencias de comandos el cuadro deslizante() y verá:
Sintaxis: cuadro = Cuadro deslizante (valor mínimo, valor máximo, variable, SCRIPT , ,
Puede tomar el JSL del botón Aceptar y colocarlo en la definición del Slider Box(). Se ejecutará cada vez que se mueva el control deslizante.
Esto resolvió perfectamente mi problema, gracias Jim por tu apoyo.