Crear una fórmula para la variable temporalHola a todos,
Todavía soy nuevo en las secuencias de comandos JMP. Necesito ayuda para crear una fórmula para hacer el valor como una variable pero con su propio nombre. Lo que quiero decir es lo siguiente. Entonces, quiero crear una fórmula que pueda hacer que la columna 4 a continuación sea una variable para el gráfico de distribución.
es como plastico = 0.424542
el problema en este momento es que el nombre de la fórmula estará en el mismo que es t4 = :TYPE;:MIN;. Entonces, si quiero trazar el valor mínimo para el plástico en el gráfico de distribución, tomará el valor mínimo para la roca, ya que la fórmula para la roca también es t4.
Entonces, ¿cómo puedo hacer la fórmula para que el valor de la variable se convierta en
Plástico = :TIPO;:MIN;
papel = :TIPO;:MIN;
y así sucesivamente, entonces ya puede ser una variable independiente. realmente apreciado si alguien puede ayudar en esto. Ya he buscado en Internet durante unas horas.

Re: Crear una fórmula para variable temporalFue mi error, omití un ")".Prueba este código
Names Default To Here( 1 );
dt = Current Data Table();
// Only one set of Spec Limits per column can be set,
// therefore split the data into separate columns
// and set the separate limits for each column
dtSplit = dt << Split( Split By( :TYPE ), Split( :NUMERIC_RESULT ), Sort by Column Property );
// Get the names of the generated columns
colList = dtSplit << get column names( string );
// Loop across the columns and create the spec limits for each column
For( i = 1, i <= N Items( colList ), i++,
Eval(
Substitute(
Expr(
__col__ << set property(
"spec limits ",
{LSL( __LSL__ ), USL( __USL__ ), show limits( 1 )}
)
),
Expr( __col__ ), Parse( "dtSplit:" || colList[i] ),
Expr( __LSL__ ),
Eval(
Parse(
"col mean(dtSplit:" || colList[i] || ")-6*col std dev(dtSplit:" || colList[i
] || ")"
)
),
Expr( __USL__ ),
Eval(
Parse(
"col mean(dtSplit:" || colList[i] || ")+6*col std dev(dtSplit:" || colList[i
] || ")"
)
)
)
)
);
// Create a literal string that contains the JSL required to
// generate the Distributions
theExpr = "Distribution(
Arrange in Rows( 1 ),";
theExpr = theExpr || Char(
Substitute(
Expr(
Continuous Distribution(
Column( __col__ ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Normal Quantile Plot( 1 )
)
),
Expr( __col__ ), Parse( "dtSplit:" || colList[1] )
)
);
For( i = 2, i <= N Items( colList ), i++,
theExpr = theExpr || "," || Char(
Substitute(
Expr(
Continuous Distribution(
Column( __col__ ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Normal Quantile Plot( 1 )
)
),
Expr( __col__ ), Parse( "dtSplit:" || colList[i] )
)
);
);
theExpr = theExpr || ");";
// Run the generated code
Eval( Parse( theExpr ) );Re: Crear una fórmula para variable temporalHola Jim,
aquí adjunto la tabla para ejecutar el código que diste con solo algunas modificaciones. Si ejecuta el script que escribió aquí, el gráfico de distribución no se generará automáticamente.
Revisé el registro e intenté depurar lo que está mal, pero parece que no puedo encontrar por qué se queja de que hay un error. me parece bien
el error es como a continuación:
Fin inesperado de la entrada. Tal vez falte un "," o ")".
Tratando de analizar los argumentos de la función "Distribución".
Línea 2 Columna 560: ...Gráfica de cuantiles normales(1));►...
Re: Crear una fórmula para variable temporalEl código que proporcioné también debería generar las distribuciones.
¿Puede adjuntar una copia de la tabla de datos con la que se está ejecutando, para que pueda ver cuál es el problema?... Si observa el archivo de registro, también debería ver cuál es el problema.
Re: Crear una fórmula para variable temporalHola Jim,
Sí, funciona para tantos valores de TIPO en la columna, pero cuando se trata de trazar el gráfico de distribución, todavía necesito trazarlo manualmente.
¿Es posible hacer que trace automáticamente el gráfico de distribución después de haber calculado todo el límite para todos los valores de TIPO? Intenté trazar manualmente el gráfico para exportar el script, pero parece que todo está codificado en el valor de TIPO en la tabla de ejemplo que di aquí solamente.
El valor de TIPO también será diferente de vez en cuando. Entonces, necesito evitar la línea codificada en el JSL.
@txnelson
Re: Crear una fórmula para variable temporalEl código que escribí debería funcionar con tantos valores de TIPO como encuentre en la tabla de datos.Si no es así, es un error y el código debe corregirse.
Re: Crear una fórmula para variable temporalEl código que proporcioné debería funcionar para tantos valores de TIPO como encuentre en la tabla de datos.
Re: Crear una fórmula para variable temporalHola Jim,
lo que quiero decir es que después de haber calculado todos los límites, trazará directamente el gráfico de distribución para todos los valores de TIPO junto con el límite calculado. Entonces, estoy pensando en hacer esto usando el script, pero cuando trato de exportar el script después de trazar todo el gráfico de distribución de TIPO, parece que todo el gráfico de tipo está codificado solo en la tabla actual.
Significa que si tengo un nuevo elemento para la columna TIPO, entonces no trazará el gráfico de distribución. Solo trazará esos 4 elementos en la columna de tipo únicamente.
Espero que esto responda a tu pregunta. solo avíseme si necesita más aclaraciones sobre esto. ¡gracias!Re: Crear una fórmula para variable temporal@mhalwi
¿Podría por favor explicar lo que quiere decir con " trazado para el gráfico de distribución automáticamente "?¿Quiere que JMP ejecute el gráfico cuando abra una nueva tabla de datos?¿O desea que JMP reconozca cuándo hay nuevos datos disponibles en algún sistema?
Re: Crear una fórmula para variable temporalHola Jim,
¡muchas gracias! tu método también funciona muy bien. ¿Alguna posibilidad de trazar el gráfico de distribución automáticamente usando JSL en lugar de elegir trazar el gráfico manualmente?Re: Crear una fórmula para variable temporalHola @Julian ,
¡ambas soluciones funcionan muy bien! ¡gracias a ti!
1 pregunta en cuanto al método alt, necesito trazar manualmente el gráfico después de dividir la tabla. ¿Existe algún método para trazar el gráfico de distribución para todas las columnas, ya que el valor de la columna TIPO siempre cambiará?
¡¡De nuevo, gracias por tu ayuda!!
Re: Crear una fórmula para variable temporalAquí hay un enfoque diferente para la salida que está intentando generar... se aprovecha de que JMP tiene la capacidad de tener límites de especificación como propiedades de columna, y para que la plataforma de distribución los reconozca y los use dentro de la plataforma
Names Default To Here( 1 );
dt = Current Data Table();
// Only one set of Spec Limits per column can be set,
// therefore split the data into separate columns
// and set the separate limits for each column
dtSplit = dt << Split( Split By( :TYPE ), Split( :NUMERIC_RESULT ), Sort by Column Property );
// Get the names of the generated columns
colList = dtSplit << get column names( string );
// Loop across the columns and create the spec limits for each column
For( i = 1, i <= N Items( colList ), i++,
Eval(
Substitute(
Expr(
__col__ << set property(
"spec limits ",
{LSL( __LSL__ ), USL( __USL__ ), show limits( 1 )}
)
),
Expr( __col__ ), Parse( "dtSplit:" || colList[i] ),
Expr( __LSL__ ),
Eval(
Parse(
"col mean(dtSplit:" || colList[i] || ")-6*col std dev(dtSplit:" || colList[i
] || ")"
)
),
Expr( __USL__ ),
Eval(
Parse(
"col mean(dtSplit:" || colList[i] || ")+6*col std dev(dtSplit:" || colList[i
] || ")"
)
)
)
)
);
// Create a literal string that contains the JSL required to
// generate the Distributions
theExpr = "Distribution(
Arrange in Rows( 1 ),";
theExpr = theExpr || Char(
Substitute(
Expr(
Continuous Distribution(
Column( __col__ ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Normal Quantile Plot( 1 )
)
),
Expr( __col__ ), Parse( "dtSplit:" || colList[1] )
)
);
For( i = 2, i <= N Items( colList ), i++,
theExpr = theExpr || "," || Char(
Substitute(
Expr(
Continuous Distribution(
Column( __col__ ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Normal Quantile Plot( 1 )
)
),
Expr( __col__ ), Parse( "dtSplit:" || colList[i] )
)
);
);
theExpr = theExpr || ";";
// Run the generated code
Eval( Parse( theExpr ) );Re: Crear una fórmula para variable temporalHola @mhalwi ,
Veo exactamente lo que estás tratando de hacer ahora. Si inserta el siguiente jsl después de crear su tabla de resumen, tendrá variables para LSL y USL nombradas para cada nivel de Tipo (secuencia de comandos completa adjunta aquí, LSL USL - Método original.jsl):
For Each Row(Eval(Parse(Concat("LSL_",:Type," = ",Char(lower_limit)))));
For Each Row(Eval(Parse(Concat("USL_",:Type," = ",Char(upper_limit)))));
Ahora, cuando llame a Distribución para cada uno de los Tipos y cree sus líneas de referencia, agregue el nombre del Tipo a LSL y USL. Por ejemplo, en Despacho para "Papel":
Dispatch(
{
"Distributions TYPE=Paper",
"NUMERIC_RESULT"},
"1",
ScaleBox,
{Min(-0.6 ), Max( 1.2 ), Inc( 0.001 ), Minor Ticks( 0 ),
Add Ref Line( USL_Paper, Solid, "Medium Dark Red", "", 2 ),
Add Ref Line( LSL_Paper, Solid, "Medium Dark Red", "", 2 )}
)
Sin embargo, esto me hizo pensar.¿Estaría abierto a una forma ligeramente diferente de lograr esto? Otra forma en que podría hacer esto es si divide su tabla original, podemos establecer LSL y USL como propiedades de columna a través de jsl. Luego, cuando llame a Distribution(), los límites se pueden trazar automáticamente. JSL para eso también se adjunta (LSL USL - Alt method.jsl).
¿Eso ayuda?
@Julian
Re: Crear una fórmula para variable temporalHola a todos,
Hola @uday_guntupalli y @Julian ,
aquí adjunté la tabla de muestra y el script jmp para que puedan probar y tener una idea de lo que estoy tratando de lograr aquí. Simplemente cambie la ruta a la tabla de datos en su computadora.
Como puede ver en el script, hay una fórmula (USL y LSL) en el resumen de la tabla de datos.
Entonces, lo que necesito hacer ahora es crear otra fórmula que pueda tomar el valor de USL para plástico y así sucesivamente y asignarlo para que se convierta en algo como Plastic_USL = 0.4. Entonces puedo usar la variable (Plastic_USL) para trazar en el gráfico de distribución de plástico usando la función sendToReport. entonces, lo mismo ocurre con la otra lista de elementos en la columna TIPO.
No puedo usar directamente la variable USL porque si la uso, solo tomará el último valor de USL calculado, que es ROCA, y lo trazará en todos los gráficos (plástico, algodón, papel, roca). Entonces, la línea para USL será correcta solo para 1 gráfico e incorrecta para el resto.
He estado buscando una manera de hacer esto, pero no puedo llegar a ninguna parte y realmente necesito la ayuda de ustedes aquí. ¡Ustedes ayudan mucho aquí!
dt = Open ("C:\*\data_table.csv");
Distribution(
Stack( 1 ),
Continuous Distribution(
Column( :NUMERIC_RESULT ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Count Axis( 1 ),
Normal Quantile Plot( 1 )
),
By( :TYPE );
);
Summary(
Group(:TYPE ),
Mean( :NUMERIC_RESULT ),
Std Dev( :NUMERIC_RESULT )
);
New Column( "lower_limit",
Numeric,
Continuous,
Format( "Best", 8 ),
Formula(
LSL = :Name( "Mean(NUMERIC_RESULT)" ) - 6 *:Name( "Std Dev(NUMERIC_RESULT)" )
),
);
New Column( "upper_limit",
Numeric,
Continuous,
Format( "Best", 8 ),
Formula(
USL = :Name( "Mean(NUMERIC_RESULT)" ) + 6 *:Name( "Std Dev(NUMERIC_RESULT)" )
),
);
wait (1);
dr = Fit Group (
Distribution(
Stack( 1 ),
Continuous Distribution(
Column( :NUMERIC_RESULT ),
Horizontal Layout( 1 ),
Vertical( 0 ),
Count Axis( 1 ),
Normal Quantile Plot( 1 )
),
By( :TYPE )
);
SendToReport(Dispatch({"Distributions TYPE=Cotton","NUMERIC_RESULT"},"1",ScaleBox,
{Min( LSL - 1 ), Max( USL + 1 ), Inc( 0.005 ), Minor Ticks( 1 ),
Add Ref Line( LSL, Solid, "Medium Dark Red", "", 2 ),
Add Ref Line( USL, Solid, "Medium Dark Red", "", 2 )}
)
);
SendToReport(
Dispatch(
{
"Distributions TYPE=Paper",
"NUMERIC_RESULT"},
"1",
ScaleBox,
{Min(-0.6 ), Max( 1.2 ), Inc( 0.001 ), Minor Ticks( 0 ),
Add Ref Line( USL, Solid, "Medium Dark Red", "", 2 ),
Add Ref Line( LSL, Solid, "Medium Dark Red", "", 2 )}
)
);
SendToReport(
Dispatch(
{
"Distributions TYPE=Plastic",
"NUMERIC_RESULT"},
"1",
ScaleBox,
{Min( 0.1 ), Max( 0.4 ), Inc( 0.005 ), Minor Ticks( 0 ),
Add Ref Line( USL, Solid, "Medium Dark Red", "", 2 ),
Add Ref Line( LSL, Solid, "Medium Dark Red", "", 2 )}
)
);
SendToReport(
Dispatch(
{
"Distributions TYPE=Rock",
"NUMERIC_RESULT"},
"1",
ScaleBox,
{Min( 0.01 ), Max( 3.5 ), Inc( 0.01 ), Minor Ticks( 0 ),
Add Ref Line( USL, Solid, "Medium Dark Red", "", 2 ),
Add Ref Line( LSL, Solid, "Medium Dark Red", "", 2 )}
)
);
)<<REPORT></REPORT>
Re: Crear una fórmula para variable temporalHola @mhalwi ,
No estoy seguro de lo que está preguntando exactamente, pero tengo dos conjeturas, ¡así que espero que una sea correcta!
Primera suposición: ¿está tratando de construir una fórmula que devuelva una columna con el tipo de texto, luego un signo igual y luego el valor en la columna min? La siguiente fórmula en una columna de fórmula logrará eso:
Concat(:Type," = ",Char(:Min))
y devolver una tabla como esta:
Adjunto la tabla de ejemplo por si te sirve.
Segunda suposición: desea establecer nuevas variables, nombradas para las celdas en la columna de tipo, a los valores en la columna min. O dicho de otra manera, desea evaluar el texto en la Columna 4 de la tabla anterior. Si eso es lo que busca (y ha creado esta tabla), puede ejecutar el siguiente jsl:
For Each Row(Eval(Parse(:Column 4)));
Pero hacer esa columna solo para evaluarla probablemente no sea el enfoque más parco. Si esto es lo que está tratando de hacer, lo siguiente establecerá esas variables sin hacer esa columna de fórmula:
For Each Row(Eval(Parse(Concat(:Type," = ",Char(:Min)))))
¡Espero que una de estas dos respuestas ayude!
@Julian
Re: Crear una fórmula para variable temporal@mhalwi ,
No estoy seguro de entender lo que estás tratando de hacer. Sin embargo, intentaré explicarlo en base a lo que he entendido.
A continuación se muestra mi interpretación de lo que está tratando de hacer. Esencialmente, trace una distribución de sus datos para poder ver el mínimo de su tipo. Supongo que el gráfico que se muestra a continuación logra eso.
Si esto no es lo que busca, ¿sería tan amable de proporcionar algunas capturas de pantalla de lo que está tratando de hacer, hecho en Excel, para que la comunidad pueda ayudarlo a lograr lo que está tratando de lograr?
