Comparar filas y columnas con caracteres especialesEsto puede ser muy fácil, pero soy nuevo en JMP y me resulta difícil encontrar una solución a este error.
"%" inesperado. Tal vez falte un "," o ")".
El acceso a la tabla de datos con alcance requiere una columna o variable de la tabla de datos en el acceso o la evaluación de dt1: Variante ácida', dt1: Variante ácida /*###*/
Simplemente estoy comparando una fila en una tabla con columnas de la otra tabla. Funciona para nombres de filas y columnas que no tienen caracteres especiales como % o (), pero tendré nombres que tendrán caracteres especiales. ¿Alguien puede indicarme cómo se puede manejar esto? Cualquier ayuda muy apreciada. Gracias
Re: Comparar filas y columnas con caracteres especialesSupuse que mi bucle no estaba bien porque no tomó el último valor. Disculpas por la actualización tardía.
Re: Comparar filas y columnas con caracteres especiales@txnelson Me di cuenta de que solo no toma los límites de especificación de la última fila del ejemplo 2. Todavía no sé por qué, pero actualizaré si lo descubro.
Gracias.
Re: Comparar filas y columnas con caracteres especiales@txnelson gracias por responder tan pronto.
Re: Comparar filas y columnas con caracteres especialesEntonces sospecho que hay una diferencia en el nombre de la columna y el nombre en la tabla de datos de límites
Re: Comparar filas y columnas con caracteres especiales@txnelson , pero cuando ejecuto el script en la tabla modificada, los límites de especificación no se ingresan en la columna "Variantes ácidas".Re: Comparar filas y columnas con caracteres especialesEl script lee la tabla de límites, fila por fila.Luego obtiene el nombre de la columna de cualquier fila en la que se encuentre actualmente y aplica los límites a la columna de la tabla de datos por Nombre de columna, no por número de columna.
Por lo tanto, el orden de las columnas en la tabla de datos no es importante
Re: Comparar filas y columnas con caracteres especiales@txnelson , ¿Es posible agregar límites de especificación a una tabla de datos si las filas no están en el mismo orden que las columnas? Por ejemplo,
la tabla Ejemplo1 será la misma que es, pero la tabla Ejemplo2 será:

¿Cómo puedo conseguir esto? Gracias por cualquier aporte.
Re: Comparar filas y columnas con caracteres especialesMuchas gracias por la explicación.
Re: Comparar filas y columnas con caracteres especialesEl problema es común al escribir JSL ... tiene caracteres especiales en los nombres de sus columnas.Entonces, por ejemplo, el nombre de su columna podría ser
A+B
y lo que intenta hacer es establecer una propiedad de columna... en este caso, Límites de especificación.Entonces, si el comando se escribe directamente, se vería así:
:A+B << Set Property( "Spec Limits", { LSL( 22 ), USL( 55 ), show limits( 1 ) } );
A JSL no le gustará esto, porque lo interpretará como una columna llamada "A" a la que está agregando el valor de un nombre de variable "B" y luego aplicándole la propiedad Establecer.JSL simplemente lanzaría un error.
Entonces, la solución es usar la función :Name().
:Name("A+B") << Set Property( "Spec Limits", { LSL( 22 ), USL( 55 ), show limits( 1 ) } );
Esto obligará a JSL a interpretar A+B como un nombre de columna.Ahora, para hacer esto aún más preciso, si agregamos un puntero a una tabla de datos al frente de esto, se asegurará de que no solo apunte a una columna específica, sino que apunte a una columna específica en una tabla de datos específica.
dt1 = data table("..........");
dt1:Name( "A+B" ) << Set Property( "Spec Limits", { LSL( 22 ), USL( 55 ), show limits( 1 ) } );
Ahora a su pregunta específica:
( "dt1:Name(\!"" || Column( dt2, "ColumnName" )[i] || "\!")" )
Realmente necesita ser visto en una forma más completa
Parse( "dt1:Name(\!"" || Column( dt2, "ColumnName" )[i] || "\!")" ) )
Necesitamos examinar siempre JSL, de adentro hacia afuera.Por lo tanto, digamos que
i = 2;
y que el valor de la segunda fila en la tabla de datos dt2 para una variable denominada ColumnName es A+B.
Column( dt2, "ColumnName" )[i] = "A+B"
Así que ahora el código JSL se resuelve en
Parse( "dt1:Name(\!"" || "A+B" || "\!")" ) )
La siguiente operación es simplemente la conversión de 3 cadenas en una cadena.
"dt1:Nombre(\!""
"A+B"
"\!")"
Puede parecer que hay demasiadas comillas dobles en la cadena uno y la cadena 3. Pero en JSL, \! es un carácter de escape, lo que indica que el carácter que le sigue debe ser tratado de manera diferente.\!n se trata como un carácter de avance de línea y, en nuestro ejemplo, \!" se trata como una comilla doble incrustada.
Entonces, una vez que se completa la concatenación, el JSL parece
Parse( "dt1:Name(\!"A+B\!")" ) )
El paso final es la acción resultante de la función Parse().Analizará la cadena y la preparará para su ejecución.En nuestro caso, simplemente significa que eliminará las comillas dobles externas y resolverá el \!" en una simple comilla doble, dejándolo con
dt1:Name("A+B")
Esta es la forma exacta de lo que se requiere como sintaxis para hacer referencia a una columna que tiene caracteres especiales en su nombre
dt1:Name( "A+B" ) << Set Property( "Spec Limits", { LSL( 22 ), USL( 55 ), show limits( 1 ) } );
espero que esto ayude
Re: Comparar filas y columnas con caracteres especiales@txnelson Esto realmente funcionó como un encanto. Sin embargo, ¿pueden ayudarme a entender qué hace esta parte? Intenté usar la función de nombre pero no pude hacer que funcionara. De nuevo, muchas gracias por tu ayuda.
<SPAN class="token punctuation">(</SPAN> <SPAN class="token string">"dt1:Name(\!"</SPAN><SPAN class="token string">" || Column( dt2, "</SPAN><SPAN class="token function">ColumnName</SPAN><SPAN class="token string">" )[i] || "</SPAN>\<SPAN class="token operator">!</SPAN><SPAN class="token string">")"</SPAN> <SPAN class="token punctuation">)</SPAN>
Re: Comparar filas y columnas con caracteres especialesAquí hay una modificación a su script que permitirá que funcione.Iba por el camino correcto, solo necesitaba usar la función :Name() en la función Sustituir
Names Default to Here(1);
dt1 = Data Table( "Example1" );
dt2 = Data Table( "Example2" );
a = N Rows( dt2 );
colNamesList = dt1 << get column names( string );
For( i = 1, i < a, i++,
Eval(
Substitute(
Expr(
If( Try( __col__ << get name, "" ) != "",
__col__ << Set Property(
"Spec Limits",
{LSL( _LSL_ ), USL( _USL_ ), Target( _Target ), Show Limits( 1 )}
)
)
),
Expr( __col__ ), Parse( "dt1:Name(\!"" || Column( dt2, "ColumnName" )[i] || "\!")" ),
Expr( _LSL_ ), dt2:LSL[i],
Expr( _USL_ ), dt2:USL[i],
Expr( _Target ), dt2:Target[i],
)
)
);
Además, agregué una verificación para asegurarme de que la columna se encuentre en la tabla de datos de destino, de modo que la secuencia de comandos no produzca un error y detenga el procesamiento antes de que se procesen todos los registros.
Re: Comparar filas y columnas con caracteres especiales@Aam_jmp ,
Tal vez esta es una publicación útil de la que puedes aprender algo https://community.jmp.com/t5/Discussions/Spec-limits-issue/mp/50166.
Estoy tratando de entender leyendo el hilo cuál era su pregunta real. Probablemente ayude si define cuál es su objetivo, de modo que los hilos sean más fáciles de responder y sean beneficiosos para la comunidad en general.
Re: Comparar filas y columnas con caracteres especialesUday, gracias por la ayuda. Me estoy enseñando a mí mismo esta parte. Sin embargo, estaba tratando de lograr poner límites de especificación a una tabla de datos usando otra tabla de datos. Puedo hacer esto sin problemas si los nombres de las columnas no tienen caracteres especiales. Sin embargo, no puedo manejar los caracteres especiales en mis tablas de datos. Un enfoque que probé fue encontrar el (%) en los nombres de mis columnas y reemplazarlos con un espacio. Aunque funcionó, no creo que sea la mejor solución a mi problema. Sé que puedo usar un complemento para agregar límites de especificaciones, pero sería bueno saber cómo puedo resolver este problema con jsl. Gracias por cualquier aporte que pueda proporcionar al respecto. mi código es:
dt1 = Data Table( "Example1" );
dt2 = Data Table( "Example2" );
a = N Rows( dt2 );
For( i = 1, i < a, i++,
Eval(
Substitute(
Expr(
__col__ << Set Property( "Spec Limits", {LSL( _LSL_ ), USL( _USL_ ), Target( _Target ), Show Limits( 1 )} );
),
Expr( __col__ ), Parse( "dt1:" || dt2:ColumnName[i] ),
Expr( _LSL_ ), dt2:LSL[i],
Expr( _USL_ ), dt2:USL[i],
Expr( _Target ), dt2:Target[i],
)
)
);
Re: Comparar filas y columnas con caracteres especiales@Aam_jmp ,
Si observa la documentación de Parse() que puede encontrar en Help => Scripting Index ==> Parse ,
Parse por su definición espera una cadena, sin embargo, está pasando 2 argumentos en su implementación y espera que se concatenen. Esta es la razón por la que pude ver por qué no funciona incluso si proporciona el nombre correcto de la columna. Scripting Index es tu amigo y utilízalo cada vez más para ayudarte con las sintaxis y las definiciones de funciones.
Re: Comparar filas y columnas con caracteres especiales¿Por qué no da el resultado que quiero con el uso de Parse incluso después de dar el nombre correcto de la columna? ¿Hay alguna manera de analizar caracteres especiales como % y ()? @uday_guntupalli
Re: Comparar filas y columnas con caracteres especiales@Aam_jmp
dt1 = data table( "Example1" );
dt2 = data table( "Example2" );
ColValuesEx2 = dt2:Column 1 << Get Values;
a = n rows(dt2);
Res= {};
For(i=1,i<=a,i++,
temp = Concat("dt1:",ColValuesEx2[i]);
Insert Into(Res,temp);
);
Show(Res);
Prueba esto. El problema que veo con lo que estaba haciendo anteriormente fue que ColName no se refiere a una columna real. Cuando intente acceder a la tabla de datos 2, debe hacer referencia a una columna que existe en la tabla de datos.
Usé concatenar en lugar de Parse y obtengo el resultado que desea.

Re: Comparar filas y columnas con caracteres especiales@uday_guntupalli Aunque no puedo proporcionar la tabla, una parte de lo que quiero lograr es poder analizar los nombres de las columnas. He creado tablas de datos que se parecen un poco. Quiero que el siguiente código funcione para estos datos.
Names Default To Here( 1 );
dt1 = data table( "Example1" );
dt2 = data table( "Example2" );
dt4 = dt2:Column 1 << get values();
a = n rows(dt2);
For(i=1,i<=a,i++,
Parse("dt1:" || dt4[i]);
);
Re: Comparar filas y columnas con caracteres especiales@Aam_jmp ,
Vuelva a leer mi respuesta e intente usar el siguiente ejemplo. La función Nombre podrá manejar el problema que tiene. Estoy publicando una muestra de la misma. A menos que comparta su secuencia de comandos y datos de muestra, es difícil ver qué está causando el error.
dt = Open( "$SAMPLE_DATA/Big Class.jmp" ); // Open Sample Data
MeanWeight = Col Sum(dt:weight); // Calculate Column Mean
dt << New Column("% of Total Weight",Numeric,Format("Percent",10,2),Continuous,Formula(:weight/MeanWeight)); // Define New column with % in name
dt << New Column("Test",Numeric,Format("Percent",10,2),Formula(Col Cumulative Sum(:Name("% of Total Weight")))); // Define Test Column that demonstrates the use of Name function that can capture the column name with % in it Espero que esto explique un poco mejor mi sugerencia, si no, amablemente ofrezca un poco más de detalles para que pueda intentar ayudar.
Re: Comparar filas y columnas con caracteres especialesLos nombres son así: Título (%) 1, Título (%) 2 y así sucesivamenteRe: Comparar filas y columnas con caracteres especiales@Aam_jmp ,
Si el símbolo % es parte del nombre de su columna, digamos que el nombre de la columna es "%x", intente usar la función Name() para identificar la columna. Si pudiera proporcionar un conjunto de datos de muestra y su secuencia de comandos, podemos verlo para ver qué está mal.