Manejo inteligente de columnas<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Gente
¿Cómo manejas las columnas de una manera inteligente?
Digamos que tengo un guión y una tabla.
Script crea algunas columnas en ella.
Mientras trabajo en un script, lo ejecuto muchas veces en una mesa. Cuando el script crea una columna, termina creando muchas columnas con el mismo nombre pero con un número diferente. Si me refiero a la columna creada por nombre más adelante en el script, se referirá a las columnas antiguas (como "Nueva columna", pero no a "Nueva columna 23").
La forma de lidiar con eso es eliminar una columna con ese nombre antes de crearlo. Los problemas comienzan cuando se usa por primera vez ese script en una tabla nueva, cuando no hay una columna para eliminar ...
De todos modos, ¿cómo se daría cuenta de la adición de la columna inteligente?
Algo como:
Quiero crear una nueva columna con este nombre. ¿Hay alguna columna con este nombre o nombre que sea este nombre y un número (dublicate las columnas)? Si es así, entonces elimínelos y cree mi columna. Si no hay tales columnas, simplemente cree una nueva columna con este nombre ...
Re: manejo inteligente de columnasOh, eso fue fácil:
dt = Abierto ( "$ sample_data \ Big Class.jmp" ) ;
nueva_columna = "IMC" ;
nueva fórmula = "7 *: peso /: altura /: altura" ;
SmartColumn = función ({ nueva_columna , nueva fórmula } ,
// ----- Iniciar SmartColumn
expr_missing = Eval Insert ( "col = dt << Nueva columna (nueva_columna, Fórmula (^ nueva_formula ^));" ) ;
expr_existe = Eval Insert ( "col = Column (new_column) << Set Formula (^ new_formula ^) << EvalFormula;" ) ;
Si ( Está perdido ( Es programable ( Tratar ( Columna ( nueva_columna ) ) ) ) ,
evaluar ( analizar gramaticalmente ( expr_missing )) ;
, evaluar ( analizar gramaticalmente ( expr_existe )) ;
) ;
// - Finalizar SmartColumn
) ;
SmartColumn ( nueva_columna , nueva fórmula ) ;
Re: manejo inteligente de columnasOk, creo que lo clavé.
Si se escribe como una función, sería simplemente un reemplazo inteligente de agregar columna.
Tomaría el nombre de la columna, la fórmula deseada y, si existe una columna con ese nombre, actualice la fórmula y evalúela, si no existe: cree y establezca la fórmula. No hay problemas si esa columna se refiere a otro lugar en otras fórmulas.
¿Puede alguien ayudarme con la sintaxis de escribirlo como una fórmula lista para usar?
Más tarde agregaría otras propiedades de columna como argumentos de función.
dt = Abierto ( "$ sample_data \ Big Class.jmp" ) ;
nueva_columna = "IMC" ;
nueva fórmula = "700 *: peso /: altura /: altura" ;
// ----- Iniciar SmartColumn
expr_missing = Eval Insert ( "col = dt << Nueva columna (nueva_columna, Fórmula (^ nueva_formula ^));" ) ;
expr_existe = Eval Insert ( "col = Column (new_column) << Set Formula (^ new_formula ^) << EvalFormula;" ) ;
Si ( Está perdido ( Es programable ( Tratar ( Columna ( nueva_columna ) ) ) ) ,
evaluar ( analizar gramaticalmente ( expr_missing )) ; ,
evaluar ( analizar gramaticalmente ( expr_existe )) ;
) ;
// - Finalizar SmartColumn
Re: manejo inteligente de columnasMi error en la falta "," en el código que te envié. Me disculpo por eso.
Mi intención, con el código, es darle una manera de detectar si una columna dada está presente.
Si ha creado una columna que tiene una fórmula que utiliza la columna que desea eliminar, la forma más sencilla de romper esa dependencia es convertir los valores en la columna que tiene la fórmula que apunta a la columna que desea eliminar, en valores reales. valores, en lugar de valores basados en fórmulas. Todo lo que tiene que hacer para hacer esto es eliminar la fórmula de la columna, y JMP convertirá los valores a datos reales. Una vez hecho esto, la columna original se puede eliminar.
Nombres predeterminados aquí ( 1 );
dt = abierto ( "$ SAMPLE_DATA \ big class.jmp" );
// Crear una nueva columna con una fórmula
dt << Nueva Columna ( "Proporción" , fórmula (: Altura / Peso));
// Eliminar la propiedad de fórmula y los datos en la columna
// se convierte a valores reales, no valores virturales
dt: Ratio << eliminar propiedad ( "Fórmula" );
Re: manejo inteligente de columnasEn realidad, voy a tomar eso de vuelta. No permitirá eliminar columnas, si se hace referencia a ellas en fórmulas de otras columnas.
¿Cualquier otra forma?
¿Es incluso posible volver a escribir datos o cambiar una fórmula para una columna, que otra columna tiene en su fórmula?
Re: manejo inteligente de columnasFuncionará si pones "," antes del segundo "dt".
¿Y no usas "Throw ()" con "Try ()"?
Re: manejo inteligente de columnasAquí está lo que yo uso:
Si (Intentar (columna (dt, "") << obtener nombre, "")! = "" Dt << eliminar columnas (""));