Existe-t-il un moyen d'extraire les colonnes utilisées dans une formule ?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Bonjour les gens-
J'essaie de créer un nouveau bouton dans ma plate-forme qui extrairait les colonnes sélectionnées à partir d'une analyse étape par étape, puis créerait des distributions univariées de chaque sélection. La limitation est que l'extraction des colonnes sélectionnées et la construction de la distribution sont limitées aux noms de colonnes spécifiques de la liste. J'aimerais pouvoir plonger dans la colonne pour vérifier s'il s'agit d'une formule, extraire toutes les colonnes utilisées si c'est le cas, puis me retourner et inclure les colonnes supplémentaires dans la liste des colonnes sélectionnées étape par étape.
Plus précisément, puis-je extraire des colonnes d’une formule ? L'utilisation de la pièce ":" ne semble pas capturer les noms complexes et l'index se réfère uniquement à la saisie de la formule entière.
Un exemple serait d'avoir ma colonne "Volume" dans une liste :
{:Volume}
Faire column("Volume")<
:Hauteur largeur longueur
Je veux terminer par une liste de :
{:Hauteur, :Largeur, :Longueur, :Volume}
Ceci est un exemple de formule simple, il y aurait d'autres versions/types avec des noms simples ou complexes...
Merci,
André Parker
Re : Existe-t-il un moyen d'extraire les colonnes utilisées dans une formule ?Je pense que c'est une paraphrase raisonnable de l'entrée Craige@JMP ci-dessus, Andrew.
Notez cependant que votre exemple ci-dessus montre que vous devrez conserver uniquement les éléments distincts dans la liste (donc « W » n'apparaît qu'une seule fois). Vous pouvez mettre cette logique dans la fonction de Craige, ou simplement manipuler la liste renvoyée par sa fonction.
Re : Existe-t-il un moyen d'extraire les colonnes utilisées dans une formule ?Merci! Cela semble définitivement être ce dont j'ai besoin pour terminer mon programme.
Pour vérifier ma compréhension de la formule, si je visualisais ce qui se passe à l'aide du générateur de formule :

Il regarde la boîte principale et demande « quelle est la formule ? » et « combien de pièces sont nécessaires ? » auquel il examine chaque morceau et répète la question jusqu'à ce qu'il atteigne une boîte avec seulement des feuilles à l'intérieur et renvoie la chaîne pour les feuilles qui constituent un nom de colonne. Une fois la plus petite boîte feuille atteinte, il commence à reculer et à regarder les nœuds/feuilles qu'il n'avait pas vérifiés sur son chemin vers la première boîte feuille...
Pas très éloquent dans la description, mais est-ce que cela vous semble correct ?
Re : Existe-t-il un moyen d'extraire les colonnes utilisées dans une formule ?Joli code ! Merci beaucoup.
Re : Existe-t-il un moyen d'extraire les colonnes utilisées dans une formule ?Ian - version récursive ici
Re : Existe-t-il un moyen d'extraire les colonnes utilisées dans une formule ?La meilleure façon de procéder serait de tokeniser de manière récursive l'expression de formule dans un arbre, puis d'analyser les nœuds feuilles à la recherche de références de colonne. Ceci est parfaitement possible en JSL en utilisant les primitives de manipulation d'expression fournies (regardez dans la section 'Listes et expressions' du Guide de script JMP, en faisant attention aux fonctions 'Head()', 'NArg()' et 'Arg()'. ). Mais vous devrez peut-être consulter un livre d’informatique pour coder cette méthode.
Alternativement, le code ci-dessous offre un moyen simple de demander à JMP de faire le travail à votre place (en utilisant le profileur) :
NomsDefaultToHere ( 1 ) ;
dt = Nouveau tableau ( "Obtenir des colonnes dans une formule" ,
Ajouter des lignes ( 20 ) ,
Nouvelle colonne ( "H" ,
Numérique ,
"Continu" ,
Format ( "Meilleur" , 12 ) ,
Formule ( Uniforme aléatoire () )
) ,
Nouvelle colonne ( "W" ,
Numérique ,
"Continu" ,
Format ( "Meilleur" , 12 ) ,
Formule ( Uniforme aléatoire () )
) ,
Nouvelle colonne ( "D" ,
Numérique ,
"Continu" ,
Format ( "Meilleur" , 12 ) ,
Formule ( Uniforme aléatoire () )
) ,
Nouvelle colonne ( "V" ,
Numérique ,
"Continu" ,
Format ( "Meilleur" , 12 ) ,
Formule ( ( : W * : H * : D ) / dix )
)
) ;
// Lance le Profiler de manière invisible
p = dt << Profileur ( Oui ( : V ) , Développer , Invisible ) ;
// Récupère la table de la grille
p << OutputGridTable ;
// Récupère les colonnes de la table grille dans une liste
cols = Table de données ( NTable ()) << getColumnNames ( "Chaîne" ) ;
// Nettoyer
p << Fermer la fenêtre ;
Fermer ( Table de données ( NTable ()) , Pas d'enregistrement ) ;