Combinaison des entrées de N colonnes en une seule colonne basée sur des entrées uniquesSalut,
J'ai N colonnes, qui contiennent des données de caractères que je souhaite consolider en une seule colonne.Pour une ligne donnée, de nombreuses colonnes peuvent être vides ou contenir des valeurs répétées/identiques (par rapport à l'entrée dans une autre colonne).
Je sais qu'il y a la fonction sous Cols -> Utilitaires -> Combiner les colonnes et cela générera une nouvelle colonne avec tous les champs côte à côte et délimités.J'ai besoin de conseils sur la façon de faire ce processus tout en maintenant l'unicité (c'est-à-dire n'ajouter les valeurs de cette colonne que s'il n'y a pas d'autres colonnes dans cette ligne qui ont la même valeur)
Idéalement, j'aimerais obtenir des conseils sur la façon de scripter cela dans JSL. Cependant, les approches intelligentes (encore plus fastidieuses) avec les tables/fonctions de données JMP sont également les bienvenues !
Merci.
Automatisation et scriptRe : Combinaison d'entrées de N colonnes en une seule colonne en fonction d'entrées uniquesMerci Brady_Brady !!
Fonctionne pour moi aussi !!Re : Combinaison d'entrées de N colonnes en une seule colonne en fonction d'entrées uniquesMerci beaucoup Mme !!
J'aime la flexibilité de cette solution, notamment la possibilité de spécifier le numéro de colonne de début et de fin à utiliser.J'aime beaucoup le fait que vous ayez également fait le tri par ordre alphabétique pour réduire le nombre de permutations !
Désolé pour la réponse tardive. J'ai d'abord pensé qu'il y avait un problème de cas d'angle où cela ne fonctionnait pas, mais après l'avoir revisité, je ne vois pas de problème.
Re : Combinaison d'entrées de N colonnes en une seule colonne en fonction d'entrées uniquesMerci Txnelson pour la réponse rapide et la solution !
Cela fonctionne bien, cependant, mes noms de colonnes sont un peu longs et j'en ai beaucoup, donc je préfère ne pas avoir à spécifier manuellement la liste.
Je pourrais obtenir les noms de colonne en utilisant un simple dt << Get Column Names et le stocker.
J'ai aussi beaucoup aimé la façon dont le super utilisateur "ms" a organisé les entrées par ordre alphabétique, ce qui réduit le nombre de permutations (bien que je ne l'aie pas demandé)
Désolé pour la réponse tardive.
Re : Combinaison d'entrées de N colonnes en une seule colonne en fonction d'entrées uniquesJe préfère les réponses précédentes, mais vous pouvez également le faire par pointer-cliquer, ce qui est attrayant pour ceux qui ne scriptent pas (apparemment, il existe des gens qui ne scriptent pas !!)
Comme avec l'approche de tableau associatif, la colonne résultante a les valeurs triées du plus petit au plus grand.
1) Sélectionnez les colonnes d'origine et, à l'aide de l'utilitaire de combinaison de colonnes, créez une colonne à réponses multiples.
2) Sélectionnez la nouvelle colonne et appliquez l'utilitaire de texte aux colonnes, en veillant à cocher la case "créer des indicateurs".
3) Après avoir sélectionné les 10 nouvelles colonnes d'indicateurs, appliquez l'utilitaire de combinaison de colonnes en veillant à cocher la case "les colonnes sont des colonnes d'indicateurs".
Re : Combinaison d'entrées de N colonnes en une seule colonne en fonction d'entrées uniquesVoici une alternative à la formule de Jim. La différence est que le valeurs uniques de la Les chaînes combinées sont triées par ordre alphabétique plutôt que par ordre d'occurrence.
Le nombre de colonnes peut être généralisé en définissant le paramètre local N .
dt = Current Data Table();
dt << New Column("Combined",
Character,
Formula(
Local({dt = Current Data Table(), N = 4},
Concat Items(Associative Array(dt[Row(), 1 :: N]) << get keys, ",")
)
)
);
(Il utilise la notation matricielle de table de données, et ne le sera donc que dans JMP 13 ou version ultérieure)
Re : Combinaison d'entrées de N colonnes en une seule colonne en fonction d'entrées uniquesVoici une façon de résoudre cette question.J'ai créé une formule qui combine les valeurs uniques d'une liste de colonnes.J'ai joint un exemple de tableau de données avec la formule appliquée à la dernière colonne

Ci-dessous la formule utilisée
VarList = {"One", "Two", "Three", "Four"};
DataList = {};
CountList = {};
DataValue = "";
For( i = 1, i <= N Items( VarList ), i++,
Insert Into( DataList, As Column( VarList[i] ) );
Insert Into( CountList, 0 );
);
For( i = 1, i <= N Items( VarList ) - 1, i++,
For( k = i + 1, k <= N Items( VarList ), k++,
If( DataList[i] == DataList[k],
CountList[k] = CountList[k] + 1
)
)
);
For( i = 1, i <= N Items( VarList ), i++,
If( CountList[i] == 0 & DataList[i] != "",
DataValue = DataValue || "," || DataList[i]
)
);
DataValue = Substr( DataValue, 2 );