¿Existe alguna forma de extraer las columnas utilizadas en una fórmula?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hola gente-
Estoy intentando crear un nuevo botón en mi plataforma que extraiga las columnas seleccionadas de un análisis paso a paso y luego cree distribuciones univariadas de cada selección. La limitación es que la extracción de las columnas seleccionadas y la construcción de la distribución se realizan en los nombres de columnas específicos de la lista. Me gustaría poder sumergirme en la columna para verificar si es una fórmula, extraer las columnas utilizadas si lo es y luego dar la vuelta e incluir las columnas adicionales en la lista de columnas seleccionadas paso a paso.
Más específicamente, ¿puedo extraer columnas de una fórmula? El uso de la pieza ":" no parece capturar nombres complejos y el índice solo se refiere a capturar la fórmula completa.
Un ejemplo sería tener mi columna "Volumen" en una lista:
{:Volumen}
Haciendo columna("Volumen")<
:Altura ancho largo
Quiero terminar con una lista de:
{:Alto, :Ancho, :Longitud, :Volumen}
Este es un ejemplo de fórmula simple, habría otras versiones/tipos con nombres simples o complejos...
Gracias,
andres parker
Re: ¿Existe alguna forma de extraer las columnas utilizadas en una fórmula?Creo que es una paráfrasis razonable de la entrada anterior de Craige@JMP, Andrew.
Sin embargo, tenga en cuenta que el ejemplo anterior muestra que necesitará mantener solo los distintos elementos de la lista (por lo que 'W' aparece solo una vez). Podrías poner esta lógica en la función de Craige o simplemente manipular la lista que devuelve su función.
Re: ¿Existe alguna forma de extraer las columnas utilizadas en una fórmula?¡Gracias! Definitivamente esto parece ser lo que necesito para completar mi programa.
Para verificar mi comprensión de la fórmula, si visualizara lo que sucede usando el generador de fórmulas:

Mira el cuadro principal y pregunta "¿cuál es la fórmula?" y '¿cuántas piezas se necesitan?' a lo cual mira cada pieza y repite la pregunta hasta que llega a un cuadro con solo hojas dentro y devuelve la cadena para las hojas que sean un nombre de columna. Una vez que se alcanza el cuadro de hoja más pequeño, comienza a retroceder y mira los nodos/hojas que no había verificado en su camino hacia el cuadro de la primera hoja...
No es muy elocuente en la descripción, pero ¿suena bien?
Re: ¿Existe alguna forma de extraer las columnas utilizadas en una fórmula?¡Buen código! Muchas gracias.
Re: ¿Existe alguna forma de extraer las columnas utilizadas en una fórmula?Ian - versión recursiva aquí
Re: ¿Existe alguna forma de extraer las columnas utilizadas en una fórmula?La mejor manera de hacer esto sería tokenizar recursivamente la expresión de la fórmula en un árbol y luego escanear los nodos de hoja en busca de referencias de columnas. Esto es perfectamente posible en JSL utilizando las primitivas de manipulación de expresiones proporcionadas (consulte la sección 'Listas y expresiones' dentro de la Guía de secuencias de comandos JMP, prestando atención a las funciones 'Head()', 'NArg()' y 'Arg()' ). Pero es posible que necesites buscar un libro de informática para codificar este método.
Alternativamente, el siguiente código ofrece una forma complicada de hacer que JMP haga el trabajo por usted (usando el generador de perfiles):
NombresDefaultToHere ( 1 ) ;
dt = Nueva mesa ( "Obtener columnas en fórmula" ,
Agregar filas ( 20 ) ,
Nueva columna ( "H" ,
Numérico ,
"Continuo" ,
Formato ( "Mejor" , 12 ) ,
Fórmula ( Uniforme aleatorio () )
) ,
Nueva columna ( "W" ,
Numérico ,
"Continuo" ,
Formato ( "Mejor" , 12 ) ,
Fórmula ( Uniforme aleatorio () )
) ,
Nueva columna ( "D" ,
Numérico ,
"Continuo" ,
Formato ( "Mejor" , 12 ) ,
Fórmula ( Uniforme aleatorio () )
) ,
Nueva columna ( "V" ,
Numérico ,
"Continuo" ,
Formato ( "Mejor" , 12 ) ,
Fórmula ( ( : W. * : h * : D ) / 10 )
)
) ;
// Lanza el Profiler de forma invisible
pag = dt << Perfilador ( Y ( : V ) , Expandir , Invisible ) ;
// Obtener la tabla de la grilla
pag << Tabla de cuadrícula de salida ;
// Obtener las columnas de la tabla de la cuadrícula en una lista
columnas = Tabla de datos ( NTable ()) << obtener nombres de columnas ( "Cadena" ) ;
// Limpiar
pag << Cerrar ventana ;
Cerca ( Tabla de datos ( NTable ()) , No guardar ) ;