Concatenar y suprimir fórmulasMuchachos,
Tengo varias tablas (muestras) que tienen muchas fórmulas de columnas activas. Mi script en un momento, concatena todas las tablas. Sin embargo, quiero que las fórmulas se supriman ya que quiero mantener intactos los datos de la tabla individual (muestra) para comparar / superponer todos los datos que se concatenaron. Desafortunadamente, parece que no puedo desactivar correctamente las fórmulas cuando se concatenan, y se están evaluando las columnas recién concatenadas, lo que pierde los datos de muestra individuales. Pensé que tenía este ritmo con el código adjunto, pero cuando volví a copiar la tabla inicial en otra carpeta, las fórmulas se "reactivaron" causando cierta frustración. Si hay una buena solución, estoy abierto a cualquier entrada ya que Suprimir la evaluación de fórmulas no funciona en la implementación actual.
Neil
Con = Expr(
n = N Table();
dt = {};
// Sort list ascending (sample replicates)
For( i = 1, i <= n, i++,
table = data table(i);
insert into(dt, table);
sort list into(dt)
);
// Concatenate each file (sample replicates)
dt_all = Data Table( dt[1] );
For(i = 1, i <= n, i++,
If(i > 1,
Suppress Formula Eval(suppress=1);
dt_all << Concatenate(Invisible, dt[i], Append to first table);
)
);
Current Data Table(dt_all);
);
Tabla de datosScriptingRe: concatenar y suprimir fórmulasLo que debe hacer es eliminar las fórmulas antes de la concatenación.Eso convertirá los valores en valores estáticos y luego no tendrá ningún problema.
:yourColumn << delete formula;
Re: concatenar y suprimir fórmulasJim
Gracias por la respuesta. Dado que hay alrededor de 10 columnas con fórmulas por tabla, ¿existe un enfoque "general" para eliminar todas a la vez?
Neil
Re: Concatenar y suprimir fórmulasPuede poner los nombres de las columnas en una lista y luego recorrer la lista, eliminando cada uno.
Re: Concatenar y suprimir fórmulasJMP también puede hacer esto de forma interactiva con los atributos estandarizados:
Seleccione todas las columnas, haga clic con el botón derecho en una de las columnas y seleccione Estandarizar atributos:

Agregue fórmula para eliminar propiedades y presione Aceptar (o aplicar):

Si tiene JMP16, esto se imprimirá en el registro mejorado:
// Open Data Table: Wheat.jmp
// → Data Table("Wheat")
Open("$SAMPLE_DATA/Wheat.jmp");
// Standardize column attributes
Local({old dt = Current Data Table()},
Current Data Table(Data Table("Wheat"));
For Each({col, index},
{:Variety, :Yield, :Moisture, :Pred Formula Yield, :Cond Pred Formula Yield},
col << Delete Formula
);
Current Data Table(old dt);
);
Y esto le dará una buena idea de cómo manejar esto (lo mismo que dijo txnelson, recorra la lista y elimine fórmulas a medida que avanza). También puede obtener todas las columnas de la tabla con << Obtener nombres de columnas. No podrá eliminar fórmulas de las columnas que no las tienen (y el script proporcionado por el registro mejorado no funcionará directamente de esa manera), pero puede evitarlo envolviendo la columna << Eliminar fórmula con Try(). Después de limpiar el script de registro mejorado, podría terminar con algo como esto:
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Wheat.jmp");
For Each({col}, dt << get column names(String),
Try(Column(dt, col) << Delete Formula)
);Re: Concatenar y suprimir fórmulasLo siento por la respuesta tardía. Agradezco todos los comentarios.
Sin atacar todas las columnas todavía, solo intenté eliminar una fórmula en una columna en particular. Cuando aplico la línea "eliminar fórmula" fuera del bucle, obtengo el resultado deseado, es decir, no existe ninguna fórmula. Sin embargo, si la misma línea va dentro del bucle, después de abrir el archivo, aparece el siguiente error:
"El diámetro de poro de la columna (um) no tiene fórmula en el acceso o evaluación de 'eliminar fórmula', eliminar fórmula/*###*/"
Obviamente, todavía no tengo la comprensión mecánica para ver por qué hay un problema. ¿Serías capaz de proporcionar alguna idea?
Muchas gracias.
For( i=1, i <= N Items(b), i++,
file_1 = Open(SD1 || b[1]);
file_1:"Pore Diameter (um)" << delete formula;
If(i > 1,
file_nxt = Open(SD1 || b[i], Private);
file_1 << Concatenate(file_nxt, Append to first table);
);
);
//file_1:"Pore Diameter (um)" << delete formula;
file_1 << Save(SD1 || "All Summary");
Close("All Summary");Re: Concatenar y suprimir fórmulas¿Está seguro de que está tratando de acceder a la tabla de datos correcta? Siempre está abriendo el mismo archivo que file_1 en el ciclo for.
Puede agregar algunas impresiones de depuración dentro del bucle para ayudarlo a descubrir cuál es el problema, como:
file_1 = Open(SD1 || b[1]);
show(file_1);
show(file_1 << Get Column Names("String")); //depending how many columns you have might not want to do this
show(Contains(file_1 << Get Column Names("String"), "Pore Diameter (um)"));
file_1:"Pore Diameter (um)" << delete formula;También recuerde cerrar las tablas de datos que ya no necesita con Close(dtref, no save);
Re: Concatenar y suprimir fórmulasJarmo,
Muchas gracias por iluminar el tema. No me di cuenta de que habría un problema sin una fórmula existente. Con ese hecho en mente, creé una declaración condicional para la primera tabla. Obviamente, esto funcionó ya que "file_1" tiene la fórmula de columna específica eliminada una vez. El código adjunto funcionó para el ejemplo de una sola columna.
Ahora que se entiende que una fórmula debe estar presente, el problema es que todas las columnas no tienen fórmulas. Entonces, si recupero todos los nombres de las columnas, habrá un subconjunto que no tiene columnas asociadas. ¿Hay alguna manera de probar si una columna tiene una fórmula para que se pueda construir una lista adecuada para repetir? ¿O simplemente "forzo brutamente" el problema configurando una lista en JSL que tendré que actualizar cada vez que agregue una fórmula a una columna?
neil
For( i=1, i <= N Items(b), i++,
If(i==1,
file_1 = Open(SD1 || b[1]);
file_1:"Pore Diameter (um)" << delete formula;
);
If(i > 1,
file_nxt = Open(SD1 || b[i], Private);
file_1 << Concatenate(file_nxt, append to first table);
Close(file_nxt, no save);
);
);
file_1 << Save(SD1 || "All Summary");
Close("All Summary");