C'è un modo per estrarre le colonne utilizzate in una formula?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ciao gente-
Sto cercando di creare un nuovo pulsante nella mia piattaforma che estragga le colonne selezionate da un'analisi graduale e quindi crei distribuzioni univariate di ciascuna selezione. La limitazione è che l'estrazione delle colonne selezionate e la creazione della distribuzione si limitano ai nomi di colonna specifici nell'elenco. Mi piacerebbe poter immergermi nella colonna per verificare se si tratta di una formula, estrarre eventuali colonne utilizzate se lo è, quindi girarsi e includere le colonne extra nell'elenco delle colonne selezionate passo per passo.
Più specificamente, posso estrarre colonne da una formula? L'uso del pezzo ":" non sembra catturare nomi complessi e l'indice si riferisce solo alla cattura dell'intera formula.
Un esempio potrebbe avere la mia colonna "Volume" in un elenco:
{:Volume}
Facendo colonna("Volume")<
:Altezza * :Larghezza * :Lunghezza
Voglio concludere con un elenco di:
{:Altezza, :Larghezza, :Lunghezza, :Volume}
Questo è un esempio di formula semplice, ci sarebbero altre versioni/tipi con nomi semplici o complessi...
Grazie,
Andrea Parker
Ri: Esiste un modo per estrarre le colonne utilizzate in una formula?Penso che sia una parafrasi ragionevole della voce Craige@JMP sopra, Andrew.
Tieni presente, tuttavia, che l'esempio immediatamente precedente mostra che dovrai mantenere solo gli elementi distinti nell'elenco (quindi "W" ricorre solo una volta). Potresti inserire questa logica nella funzione di Craige o semplicemente manipolare l'elenco restituito dalla sua funzione.
Ri: Esiste un modo per estrarre le colonne utilizzate in una formula?Grazie! Questo sembra sicuramente essere ciò di cui ho bisogno per completare il mio programma.
Per verificare la mia comprensione della formula, se visualizzassi cosa sta succedendo utilizzando il generatore di formule:

Guarda la casella principale e chiede "qual è la formula?" e "quanti pezzi sono necessari?" a cui guarda ogni pezzo e ripete la domanda finché non raggiunge una casella con solo foglie all'interno e restituisce la stringa per qualunque foglia sia un nome di colonna. Una volta raggiunta la scatola fogliare più piccola, inizia a indietreggiare e guardare i nodi/foglie che non aveva controllato nel suo percorso verso la prima scatola fogliare...
Non molto eloquente nella descrizione, ma suona bene?
Ri: Esiste un modo per estrarre le colonne utilizzate in una formula?Bel codice! Grazie molto.
Ri: Esiste un modo per estrarre le colonne utilizzate in una formula?Ian - versione ricorsiva Qui
Ri: Esiste un modo per estrarre le colonne utilizzate in una formula?Il modo migliore per farlo sarebbe tokenizzare ricorsivamente l'espressione della formula in un albero, quindi scansionare i nodi foglia per i riferimenti alle colonne. Ciò è perfettamente possibile in JSL utilizzando le primitive di manipolazione delle espressioni fornite (consultare la sezione 'Elenchi ed espressioni' all'interno della Guida allo scripting JMP, prestando attenzione alle funzioni 'Head()', 'NArg()' e 'Arg()' ). Ma potrebbe essere necessario tirare fuori un libro di informatica per codificare questo metodo.
In alternativa, il codice seguente offre un modo complicato per far sì che JMP svolga il lavoro per te (utilizzando il profiler):
NomiDefaultToHere ( 1 ) ;
dt = Nuova tabella ( "Ottieni colonne nella formula" ,
Aggiungi righe ( 20 ) ,
Nuova colonna ( "H" ,
Numerico ,
"Continuo" ,
Formato ( "Migliore" , 12 ) ,
Formula ( Uniforme casuale () )
) ,
Nuova colonna ( "W" ,
Numerico ,
"Continuo" ,
Formato ( "Migliore" , 12 ) ,
Formula ( Uniforme casuale () )
) ,
Nuova colonna ( "D" ,
Numerico ,
"Continuo" ,
Formato ( "Migliore" , 12 ) ,
Formula ( Uniforme casuale () )
) ,
Nuova colonna ( "V" ,
Numerico ,
"Continuo" ,
Formato ( "Migliore" , 12 ) ,
Formula ( ( : W * : H * : D ) / 10 )
)
) ;
// Avvia il Profiler in modo invisibile
P = dt << Profilatore ( Y ( : V ) , Espandere , Invisibile ) ;
// Ottieni la tabella della griglia
P << TabellaGrid di output ;
// Inserisci le colonne nella tabella della griglia in un elenco
col = Tabella dati ( NTabella ()) << getColumnNames ( "Corda" ) ;
// Ripulire
P << Chiudi la finestra ;
Vicino ( Tabella dati ( NTabella ()) , Nessun salvataggio ) ;