Wie kann ich die Summe aller verschiedenen Kombinationen einer Spaltengruppe ermitteln?Hallo,
Ich verwende JMP PRO v16
Ich habe eine Gruppe von 10 Spalten mit numerischen Werten und möchte versuchen, eine Summe der Bewertungen in allen möglichen Kombinationen zwischen diesen 10 Spalten zu erhalten (z. B. Spalte A+ Spalte B, Spalte A+ Spalte B + Spalte C, Spalte B +). Spalte C usw.).
Vielen Dank für deine Hilfe
Automatisierung und SkripterstellungBetreff: Wie kann ich die Summe aller verschiedenen Kombinationen einer Spaltengruppe ermitteln?Vielen Dank, Jim, für deine Hilfe!
Betreff: Wie kann ich die Summe aller verschiedenen Kombinationen einer Spaltengruppe ermitteln?Hier ist die Änderung des Codes, den ich zuvor übermittelt habe.Dieser Code fügt für jede Kombination der ersten 10 Spalten eine neue Spalte hinzu.Es werden 1013 neue Spalten hinzugefügt.Bitte überprüfen Sie die Richtigkeit der Ergänzungen in der Datentabelle.
Names Default To Here( 1 );
dt = data table("sum combined");
startCol = 2;
endCol = N Col( dt ) ;
colNames = dt << get column names( string );
// Build Combinations
For( nInCombo = 2, nInCombo <= endCol, nInCombo++,
combos = NChooseK Matrix( endCol, nInCombo );
For( row = 1, row <= N Rows( combos ), row++,
// create the column name and the formula for the new column
name = "";
cols = N Cols( combos );
code = "Sum( :\!"" || colNames[combos[row, 1, 1]] || "\!"n";
name = "\!"" || colNames[combos[row, 1, 1]];
For( col = 2, col <= cols, col++,
code = code || ", :\!"" || colNames[combos[row, col, 1]] || "\!"n";
name = name || " + " || colNames[combos[row, col, 1]];
);
name = name || "\!"";
code = code || " )";
eval(parse("dt << new column(" || name || ", formula(" || code || "));"));
// Uncomment the next line to remove the formula for the column. This
// will probably make the data table run faster
//column(dt,ncols(dt)) << delete property("formula");
);
);Betreff: Wie kann ich die Summe aller verschiedenen Kombinationen einer Spaltengruppe ermitteln?Hallo Jim,
Vielen Dank für deine Hilfe,
Das ist genau das, wonach ich gesucht habe. Ich brauche möglichst eine Spalte mit der Summe jeder Kombination (alle möglichen Kombinationen aus 2, 3, 4, 5, 6, 7, 8 UND 9 Spalten).
Ich fange gerade erst mit JSL an und schätze Ihre Hilfe sehr.
Betreff: Wie kann ich die Summe aller verschiedenen Kombinationen einer Spaltengruppe ermitteln?Mir ist wirklich nicht klar, wie genau das Endergebnis aussehen muss.Unten finden Sie jedoch ein Skript, das alle Spaltenkombinationen für eine Datentabelle mit 7 (nicht 10, aber mit 10 funktionierenden) numerischen Spalten zusammenfasst.Es erstellt eine neue Tabelle mit der Summe für jede der erstellten Spaltenkombinationen.

Names Default To Here( 1 );
dt =
// Open Data Table: Blood Pressure.jmp
// → Data Table( "Blood Pressure" )
Open( "$SAMPLE_DATA/Blood Pressure.jmp" );
startCol = 3;
endCol = N Col( dt ) - startCol - 1;
colNames = dt << get column names( string );
Remove From( colNames, 1, startCol - 1 );
dtOutput = New Table( "output", New Column( "Columns Used", character ), New Column( "Sum" ) );
// Build Combinations
For( nInCombo = 2, nInCombo <= endCol, nInCombo++,
combos = NChooseK Matrix( endCol, nInCombo );
Show( endcol, combos );
For( row = 1, row <= N Rows( combos ), row++,
Current Data Table( dt );
name = "";
cols = N Cols( combos );
code = "x=Sum( col sum( :\!"" || colNames[combos[row, 1, 1]] || "\!"n)";
name = colNames[combos[row, 1, 1]];
For( col = 2, col <= cols, col++,
code = code || ", col sum( :\!"" || colNames[combos[row, col, 1]] || "\!"n)";
name = name || " + " || colNames[combos[row, col, 1]];
);
code = code || " )";
Eval( Parse( code ) );
dtOutput << add rows( 1 );
dtOutput:Columns Used[N Rows( dtOutput )] = name;
dtOutput:Sum[N Rows( dtOutput )] = x;
);
);
Wenn Sie möchten, dass die Summierungen Zeile für Zeile erfolgen, kann mein Code einfach geändert werden, um in der vorhandenen Datentabelle eine neue Spalte für jede der Kombinationen zu erstellen
Betreff: Wie kann ich die Summe aller verschiedenen Kombinationen einer Spaltengruppe ermitteln?Vielen Dank! Ich denke, dieses Skript erzeugt nur paarweise Kombinationen. Gibt es eine Möglichkeit, alle möglichen Kombinationen zu haben? (d. h. alle möglichen Kombinationen von 2, 3, 4, 5, 6, 7, 8 und 9 Spalten),
Nochmals vielen Dank für Ihre Hilfe,
Betreff: Wie kann ich die Summe aller verschiedenen Kombinationen einer Spaltengruppe ermitteln?Hallo @DivisiveFerret8 .,
Ich kenne keine schnelle Möglichkeit, dies interaktiv in JMP zu tun, aber mit etwas JSL können wir diese Spalten schnell erstellen:
Names Default to Here (1);
dt = Current Data Table();
// Get the number of columns
ncols = N Col( dt );
// Nested loop to go through all pairwise combinations of columns
For( i = 1, i < ncols, i++,
For( j = i + 1, j <= ncols, j++,
colName1 = Column( dt, i ) << get name;
colName2 = Column( dt, j ) << get name;
// create new column
newColName = colName1 || " + " || colName2;
dt << New Column( newColName, Numeric, "Continuous", Format( "Best", 12 ) );
// compute the sum
Column( dt, newColName ) << set each value(
Column( dt, colName1 )[Row()] + Column( dt, colName2 )[Row()]
);
)
);
//BEARBEITEN//
Der obige Code gilt für alle Spaltenkombinationen in der Tabelle, aber ich sehe jetzt, dass Sie nach einer Gruppe von Spalten gefragt haben:
Names Default to Here (1);<BR />dt = Current Data Table();
// List of specific columns
// columns = {"Column A", "Column B", "Column C", "Column D", "Column E", "Column F", "Column G", "Column H", "Column I", "Column J"};
// Using selected columns
// columns = dt << Get Selected Columns;
// Referencing by Group Name
columns = dt << get column group( "XY" );
// Number of specific columns
ncols = N Items( columns );
// Nested loop to go through all pairwise combinations of specified columns
For( i = 1, i < ncols, i++,
For( j = i + 1, j <= ncols, j++,
colName1 = columns[i]<<GET name=""></GET>
Ich habe dort einige andere Optionen gelassen, z. B. eine Liste bestimmter Spalten oder die Verwendung ausgewählter Spalten.
Ich hoffe das hilft!
@julianisch