¡Sé cómo hacerlo en SAS pero no puedo resolver esto en JMP! Como datos ficticios adjuntos, tengo una identificación única para cada fila y diferentes variables que son 1 o 0. Quiero resumir para cada ID qué variable se marcó como 1, Y la lista debe basarse en el orden de frecuencias de cada Variable (quién tiene más 1 hasta menos 1). Es fácil reordenar manualmente las columnas y luego concatenarlas todas en mi columna de resultados, pero tengo miles de filas y cientos de columnas para reordenar. Tengo que encontrar una manera en lugar de hacerlo manualmente ... morir aquí. ¡por favor ayuda!
Lo más probable es que esta publicación esté en el área Debates, no en el área de Discusiones de la comunidad.
Lo más probable es que haya mejores formas de hacer esto, pero aquí hay una solución pesada de scripting que parece funcionar con datos de ejemplo:
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;
);Además no tiene un manejo específico para corbatas.

También puede hacer esto de forma interactiva:
Datos de pila:

Agregar fórmulas:
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))
)Ordene los datos por ID y RankForId (seleccione ambos y ordene de forma ascendente):

Transponer datos:


Elimine la columna Etiqueta y las columnas Combinar fila del menú Columnas:

Elimine las columnas innecesarias y vuelva a unirlas a la tabla de datos original si es necesario.
La solución interactiva puede tener un orden diferente entre vínculos que la versión de scripting