Je sais comment le faire en SAS mais je n'arrive pas à le comprendre dans JMP !!! En tant que données factices jointes, j'ai un identifiant unique pour chaque ligne et différentes variables que 1 ou 0. Je souhaite résumer pour chaque ID la variable signalée comme 1, ET la liste doit être basée sur l'ordre des fréquences de chaque variable (qui a le plus de 1 au moins). Il est facile de réorganiser manuellement les colonnes puis de tout concaténer dans ma colonne de résultats, mais j'ai des milliers de lignes et des centaines de colonnes à réorganiser. Je dois trouver un moyen plutôt que manuel... mourir ici. s'il vous plaît aidez-moi!
Ce message devrait très probablement être dans les discussions et non dans la zone de discussions de la communauté.
Il existe très probablement de meilleures façons de le faire, mais voici une solution lourde de scripts qui semble fonctionner avec des exemples de données :
Names Default To Here(1);
//Example datatable
dt = New Table("Q OF THE DAY",
Add Rows(5),
New Column("ID", Character(1), "Nominal", Set Values({"A", "B", "C", "D", "E"}), Set Display Width(38)),
New Column("V1", Numeric, "Continuous", Format("Best", 12), Set Values([1, 0, 1, 0, 0]), Set Display Width(38)),
New Column("V2", Numeric, "Continuous", Format("Best", 12), Set Values([1, 1, 1, 0, 0]), Set Display Width(38)),
New Column("V3", Numeric, "Continuous", Format("Best", 12), Set Values([0, 0, 1, 0, 0]), Set Display Width(38)),
New Column("V4", Numeric, "Continuous", Format("Best", 12), Set Values([1, 1, 1, 0, 1]), Set Display Width(42)),
New Column("V6", Numeric, "Continuous", Format("Best", 12), Set Values([0, 0, 1, 0, 1]))
);
/*
colCount = 10;
dt = new table("example",
add rows(1000),
New Column("ID", Numeric, Ordinal, << Set Each Value(Row()));
);
For(i = 1, i <= colCount, i++,
dt << New Column("V" || char(i), Numeric, Ordinal,
<< Set Each Value(Random Binomial(1, 0.9))
);
);
*/
colNames = dt << Get Column Names("String");
//Drop ID column
colNames = Substr(colNames, 2);
//sorting list https://community.jmp.com/t5/JSL-Cookbook/Sorting-Lists/ta-p/240795
//create ranking based on sums and column idx
sumsOfCols = V Sum(dt[0, colNames]); //order is same as in coLNames
orderCols = Reverse(Rank(sumsOfCols));
newCol = dt << New Column("ORDERED", Character, Nominal);
For Each Row(dt,
//Indices of columns which have 1
idxWithOne = Loc(dt[Row(), colNames]);
//if all values are missing continue to next row
If(N Items(idxWithOne) == 0,
continue();
);
//fill list with empty values
tempList = Repeat({""}, N Items(colNames));
//replace empty with colnames which had 1
tempList[idxWithOne] = colNames[idxWithOne];
//reorder list based on sum ranking
reOrderedList = tempList[orderCols];
//create string of list and remove whitespaces
orderedString = Trim Whitespace(Collapse Whitespace(Concat Items(tempList[orderCols], " ")));
//add value to column
newCol[Row()] = orderedString;
);De plus, il n'a pas de traitement spécifique pour les cravates.

Vous pouvez également le faire de manière interactive :
Données de pile :

Ajouter des formules :
New Column("Orders",
Numeric,
"Continuous",
Format("Best", 12),
Formula(Col Sum(:Data, :Label))
),
New Column("RankForId",
Numeric,
"Continuous",
Format("Best", 12),
Formula(Col Rank(Col Max(:Orders) - :Orders, :ID)),
Set Display Width(70)
),
New Column("ColumnName",
Character,
"Nominal",
Formula(If(:Data == 1, :Label))
)Triez les données par ID et RankForId (sélectionnez les deux et triez par ordre croissant) :

Transposer les données :


Supprimer la colonne Étiquette et Combiner les colonnes Ligne du menu Colonnes :

Supprimez les colonnes inutiles et rejoignez la table de données d'origine si nécessaire.
La solution interactive peut avoir un ordre différent entre les liens que la version de script