Come posso ottenere la somma di tutte le diverse combinazioni di un gruppo di colonne?CIAO,
Sto usando JMP PRO v16
Ho un gruppo di 10 colonne con valori numerici e voglio provare a ottenere una somma dei punteggi in tutte le combinazioni possibili tra queste 10 colonne (ad esempio, colonna A+ colonna B, colonna A+ colonna B + colonna C, colonna B + Colonna C e così via).
Grazie mille per il vostro aiuto
Automazione e scriptingRi: Come posso ottenere la somma di tutte le diverse combinazioni di un gruppo di colonne?CIAO @DivisiveFerret8 .,
Non conosco un modo rapido per farlo in modo interattivo in JMP, ma con alcuni jsl possiamo creare rapidamente quelle colonne:
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()]
);
)
);
//MODIFICARE//
Il codice sopra è per tutte le combinazioni di colonne nella tabella, ma ora vedo che stavi chiedendo informazioni su un gruppo di colonne:
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>
Ho lasciato alcune altre opzioni lì, come un elenco di colonne specifiche o utilizzando colonne selezionate.
Spero che aiuti!
@giuliano
Ri: Come posso ottenere la somma di tutte le diverse combinazioni di un gruppo di colonne?Grazie mille! Penso che questo script produca solo combinazioni a coppie, c'è un modo per avere tutte le combinazioni possibili? (vale a dire, tutte le possibili combinazioni di 2, 3, 4, 5, 6, 7, 8 e 9 colonne),
Grazie ancora per il tuo aiuto,
Ri: Come posso ottenere la somma di tutte le diverse combinazioni di un gruppo di colonne?Non sono davvero chiaro su quale debba essere esattamente il risultato finale.Tuttavia, di seguito è riportato uno script che riassume tutte le combinazioni di colonne per una tabella di dati che ha 7 (non 10, ma funzionerà con 10) colonne numeriche.Crea una nuova tabella con la somma per ciascuna delle combinazioni di colonne create.

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;
);
);
Se vuoi che le somme vengano eseguite riga per riga, il mio codice può essere facilmente modificato per creare nella tabella dati esistente una nuova colonna per ciascuna delle combinazioni
Ri: Come posso ottenere la somma di tutte le diverse combinazioni di un gruppo di colonne?Ciao Jim,
Grazie mille per il vostro aiuto,
Questo è esattamente quello che stavo cercando, ho bisogno di ottenere una colonna con la somma di ciascuna delle combinazioni, se possibile (tutte le possibili combinazioni di 2, 3, 4, 5, 6, 7, 8 E 9 colonne)
Sto appena iniziando in JSL e apprezzo davvero tutto il tuo aiuto,
Ri: Come posso ottenere la somma di tutte le diverse combinazioni di un gruppo di colonne?Ecco la modifica al codice che ho precedentemente inviato.Questo codice aggiunge una nuova colonna per ogni combinazione delle prime 10 colonne.Aggiunge 1013 nuove colonne.Si prega di verificare la correttezza delle aggiunte alla tabella dei dati.
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");
);
);Ri: Come posso ottenere la somma di tutte le diverse combinazioni di un gruppo di colonne?Grazie mille Jim per il tuo aiuto!