Ich weiß, wie man das in SAS macht, aber in JMP komme ich nicht dahinter!!! Als angehängte Dummy-Daten habe ich für jede Zeile eine eindeutige ID 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 auf der Reihenfolge der Häufigkeiten jeder Variablen basieren (wer hat die meisten Einsen bis hin zu den wenigsten Einsen). Es ist einfach, Spalten manuell neu anzuordnen und dann alle in 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 Sie!
Dieser Beitrag sollte sich höchstwahrscheinlich in der Kategorie „Diskussionen“ und nicht im Bereich „Community-Diskussionen“ befinden.
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;
);Außerdem gibt es keine spezielle Handhabung für Bindungen.

Möglicherweise können Sie 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:


Beschriftungsspalte entfernen und Zeilenspalten kombinieren aus dem Menü „Spalten“:

Entfernen Sie unnötige Spalten und verknüpfen Sie sie bei Bedarf wieder mit der ursprünglichen Datentabelle.
Die interaktive Lösung weist möglicherweise eine andere Reihenfolge zwischen Verknüpfungen auf als die Skriptversion