Je sais comment le faire dans SAS mais je n'arrive pas à comprendre cela dans JMP !!! En tant que données factices jointes, j'ai un identifiant unique pour chaque ligne et différentes variables, soit 1 ou 0. Je veux 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 jusqu'au moins de 1). Il est facile de réorganiser manuellement les colonnes puis de tout concaténer à 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 qu'un 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 des discussions communautaires.
Il existe très probablement de meilleures façons de procéder, 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 liens.

Vous pourriez également le faire de manière interactive :
Données de la 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))
)Trier les données par ID et RankForId (sélectionner les deux et trier par ordre croissant) :

Transposer les données :


Supprimez la colonne Libellé et les colonnes Combiner les lignes 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