Determinar si existe una columna<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Tengo un script JMP que crea una nueva columna con una fórmula. Estoy tratando de averiguar cómo detectar si la columna ya existe para poder omitir su creación y evitar generar columnas adicionales. Estoy seguro de que está ahí, pero no lo encuentro en la literatura que tengo.
Gracias.
Miguel
Re: Determinar si existe una columnaAquí hay una versión de mi lógica que no distingue entre mayúsculas y minúsculas.
dt = open("$sample_data\Big Class.jmp");
col_name_list = dt << get column names(string);
// Convert all column names to uppercase for case-insensitive search
for (i = 1, i <= nitems(col_name_list), i++,
col_name_list[i] = uppercase(col_name_list[i]);
);
new_column = "BMI";
// English BMI Formula BMI = ( Weight in Pounds / ( Height in inches^2 ) ) x 703
if (!contains(col_name_list, uppercase(new_column)),
dt <<NEW column=""></NEW>Re: Determinar si existe una columnaGracias ms!
Solo tu ejemplo funcionó para mí, porque la otra solución distingue entre mayúsculas y minúsculas. Tuve que usar el tuyo, ya que no podía estar seguro de que las mayúsculas y minúsculas de mis caracteres de cadena fueran correctas.Re: Determinar si existe una columnaPMroz,
Permítanme comenzar confirmando que el código que escribieron funcionó para mí también, y la explicación que escribí no es consistente con el comportamiento de JMP 9 o 10.
Después de leer su respuesta, también probé varias combinaciones diferentes de contiene y si las declaraciones con listas, cadenas y números en JMP 9 y 10. Aunque mis intentos no fueron exhaustivos, todos mis resultados son consistentes con los suyos. Inicialmente, cuando leí su primera publicación, recordé algunas soluciones de problemas que había realizado años antes en las que había adoptado el uso de contains()>0. No puedo recrear el escenario; sin embargo, encontré la siguiente información en la guía de secuencias de comandos JMP. Detalla el uso de contiene con >0, que puede ser apropiado para su ejemplo, pero no establece explícitamente si es o no es necesario.
Página 136 de la guía de secuencias de comandos JMP versión 10:
"Para evaluar si un elemento está en una lista, utilice ubicación() y Contiene() con >0 . Un valor devuelto de cero
significa que el artículo no está en la lista. Un valor devuelto de 1 significa que el elemento está en la lista al menos una vez".
...
"Averigua si el número 5 existe en el numList:
NRow(Loc(numList, 5)) >0;
0
Contiene(listaNum, 5) >0;
0"
Espero que esto ayude.
Re: Determinar si existe una columnaHola wiebepo,
Probé diferentes combinaciones y negar un entero positivo, sin importar cuán grande sea, da como resultado un 0. Entonces mi código funcionará (en JMP 9 y 10).Dicho esto, agradezco las advertencias: es posible que este enfoque no funcione en todos los idiomas.Ciertamente lleva más pruebas.
b = 2000000000000;
!b;
El registro muestra:
0
Saludos,
PMroz
Re: Determinar si existe una columnaTambién es útil saberlo. Siempre estoy contento de tener otra herramienta para agregar a la caja de herramientas.
Gracias.
Re: Determinar si existe una columnaEso es muy útil para saber. Tendré que estar atento a eso.
Gracias
Re: Determinar si existe una columnaNo hay una sola función que yo sepa. Pero Está perdido() en combinación con Es programable () puede hacer el truco.
La columna también debe estar encerrada por una instrucción Try() para evitar que la secuencia de comandos se detenga si la columna no existiera.
dt = Open( "$sample_data\Big Class.jmp" );
new_column = "BMI";
If( Is Missing( Is Scriptable( Try( Column( new_column ) ) ) ),
dt << New Column( new_column, numeric, continuous, formula( 703 * :weight / :height / :height ) )
);
Re: Determinar si existe una columnaNo estoy seguro si esto es cierto en todas las versiones recientes de JMP. Hago este comentario solo para resaltar una oportunidad de mejorar la solidez del código.
'Contiene' devuelve la posición del elemento, que está bien para usar en una declaración 'si', ya que cero se interpretará como falso y un valor positivo se interpretará como verdadero. Cuando precede a un contiene con un '!', la condición funciona cuando el elemento no está presente o cuando está presente como el primer elemento; sin embargo, cuando el elemento no es el primero (un valor mayor que 1), el not '!' puede fallar al convertir la condición en falsa. Esto se puede evitar usando una comparación '>0' con 'contiene'. Consulte a continuación la sintaxis.
dt = Open( "$sample_data\Big Class.jmp" );
col_name_list = dt << get column names( string );
new_column = "BMI";
// English BMI Formula
// BMI = ( Weight in Pounds / ( Height in inches x Height in inches ) ) x 703
If( !(Contains( col_name_list, new_column ) > 0),
dt << New Column( "BMI", numeric, continuous, formula( 703 * :weight / :height / :height ) )
);
Re: Determinar si existe una columnaGracias, eso funciona bien para mí. Esperaba encontrar una función para verificar la existencia, pero esto funciona.
Re: Determinar si existe una columna
dt = open("$sample_data\Big Class.jmp");
col_name_list = dt << get column names(string);
new_column = "BMI";
// English BMI Formula
// BMI = ( Weight in Pounds / ( Height in inches x Height in inches ) ) x 703
if (!contains(col_name_list, new_column),
dt <<NEW column=""></NEW>