Ich weiß, wie es in SAS geht, aber ich kann das in JMP nicht herausfinden !!! Als angehängte Dummy-Daten habe ich eine eindeutige ID für jede Zeile und verschiedene Variablen, die entweder 1 oder 0 sind. Ich möchte für jede ID zusammenfassen, welche Variable als 1 gekennzeichnet ist UND die Liste muss basierend auf der Reihenfolge der Häufigkeiten jeder Variablen (wer die meisten 1 bis zu den kleinsten 1 hat) zusammenfassen. Es ist einfach, Spalten manuell neu anzuordnen und dann alle mit meiner Ergebnisspalte zu verketten, aber ich muss Tausende Zeilen und Hunderte Spalten neu anordnen. Ich muss einen Weg finden, anstatt manuell... hier zu sterben. bitte helfen!
Dieser Beitrag sollte höchstwahrscheinlich in den Diskussionen und nicht im Bereich der Community-Diskussionen sein.
Höchstwahrscheinlich gibt es dafür bessere Möglichkeiten, aber hier ist eine skriptintensive Lösung, die mit Beispieldaten zu funktionieren schien:
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;
);Es hat auch keine spezielle Handhabung für Krawatten.

Sie können dies auch interaktiv tun:
Stapeldaten:

Formeln hinzufügen:
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))
)Daten nach ID und RankForId sortieren (beide auswählen und aufsteigend sortieren):

Daten transponieren:


Entfernen Sie die Beschriftungsspalte und die Zeilenkombinationsspalten aus dem Menü "Spalten":

Entfernen Sie unnötige Spalten und verbinden Sie sie bei Bedarf wieder mit der ursprünglichen Datentabelle.
Interaktive Lösung kann eine andere Reihenfolge zwischen Bindungen aufweisen als die Skriptversion