Comment puis-je obtenir la somme de toutes les différentes combinaisons d’un groupe de colonnes ?Salut,
J'utilise JMP PRO v16
J'ai un groupe de 10 colonnes avec des valeurs numériques et je veux essayer d'obtenir une somme des scores dans toutes les combinaisons possibles entre ces 10 colonnes (par exemple, colonne A+ colonne B, colonne A+ colonne B + colonne C, colonne B + Colonne C et ainsi de suite).
Je vous remercie beaucoup pour votre aide
Automatisation et scriptsRe : Comment puis-je obtenir la somme de toutes les différentes combinaisons d'un groupe de colonnes ?Merci beaucoup Jim pour votre aide !
Re : Comment puis-je obtenir la somme de toutes les différentes combinaisons d'un groupe de colonnes ?Voici la modification du code que j'ai précédemment soumis.Ce code ajoute une nouvelle colonne pour chaque combinaison des 10 premières colonnes.Il ajoute 1013 nouvelles colonnes.Veuillez vérifier l'exactitude des ajouts au tableau de données.
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");
);
);Re : Comment puis-je obtenir la somme de toutes les différentes combinaisons d'un groupe de colonnes ?Salut Jim,
Je vous remercie beaucoup pour votre aide,
C'est exactement ce que je cherchais, j'ai besoin d'obtenir une colonne avec la somme de chacune des combinaisons si possible (toutes les combinaisons possibles de 2, 3, 4, 5, 6, 7, 8 ET 9 colonnes)
Je débute tout juste en JSL et j'apprécie vraiment toute votre aide,
Re : Comment puis-je obtenir la somme de toutes les différentes combinaisons d'un groupe de colonnes ?Je ne sais vraiment pas exactement quel doit être le résultat final.Cependant, vous trouverez ci-dessous un script qui résume toutes les combinaisons de colonnes pour une table de données comportant 7 (et non 10, mais fonctionnera avec 10) colonnes numériques.Il crée un nouveau tableau avec la somme de chacune des combinaisons de colonnes en cours de création.

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;
);
);
Si vous souhaitez que les sommations soient faites ligne par ligne, mon code peut facilement être modifié pour créer dans le tableau de données existant, une nouvelle colonne pour chacune des combinaisons.
Re : Comment puis-je obtenir la somme de toutes les différentes combinaisons d'un groupe de colonnes ?Merci beaucoup! Je pense que ce script ne produit que des combinaisons par paires, existe-t-il un moyen d'avoir toutes les combinaisons possibles ? (c'est-à-dire toutes les combinaisons possibles de 2, 3, 4, 5, 6, 7, 8 et 9 colonnes),
Merci encore pour votre aide,
Re : Comment puis-je obtenir la somme de toutes les différentes combinaisons d'un groupe de colonnes ?Salut @DivisiveFerret8 .,
Je ne connais pas de moyen rapide de le faire de manière interactive dans JMP, mais avec du JSL, nous pouvons créer ces colonnes rapidement :
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()]
);
)
);
//MODIFIER//
Le code ci-dessus concerne toutes les combinaisons de colonnes du tableau, mais je vois maintenant que vous posiez des questions sur un groupe de colonnes :
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>
J'y ai laissé d'autres options, comme une liste de colonnes spécifiques ou l'utilisation de colonnes sélectionnées.
J'espère que ça aide!
@julien