Somme de toutes les colonnes à l'aide d'une boucleBonjour à tous, je crée un script assez long dans lequel je ne saurai pas quelles colonnes sont présentes dans une table donnée car il crée plusieurs tables à partir de différents ensembles de données. Un tableau récapitulatif est créé avec plus de 50 colonnes, parfois plus de 70. Je dois additionner toutes les valeurs de ces colonnes, mais je ne peux pas spécifier la somme par :Name("Column Name") au cas où certaines catégories seraient présentes/manquantes. C'est la boucle que j'essaie d'utiliser:
Current Data Table() << New Column( "Total Die",
formula(
For( j = 1, j <= N, j++,
cols = Column( dt, j ) << getname()
);
Sum( cols );
)
);
La somme n'acceptera pas le format de la list , alors vous vous demandez simplement comment faire autrement? Merci!
Personnalisation de masseRe : Somme de toutes les colonnes à l'aide d'une boucleVectoriser complètement le calcul.
Names Default To Here( 1 );
dt = Current Data Table();
n = N Col( dt );
vals = (dt << Get As Matrix) * J( n, 1, 1);
dt << New Column( "new", "Numeric", "Continuous",
Values( vals )
);
Re : Somme de toutes les colonnes à l'aide d'une boucleEn étendant un peu vos connaissances, je pense que le moyen le plus simple de gérer le problème est de ne pas créer de colonne de formules, mais plutôt de créer la colonne, puis d'utiliser la fonctionnalité de JSL à l'aide de matrices pour effectuer la magie.
Names Default To Here( 1 );
dt = Current Data Table();
N = N Col( dt );
dt << New Column( "new" );
For Each Row(
dt:new = Sum( dt[Row(), index(1,ncols(dt)-1)] )
);
Re : Somme de toutes les colonnes à l'aide d'une boucleOups ! Désolé - Il semble que vous vouliez réellement additionner les colonnes par ligne. Voir, Par exemple .
Alternativement, si vous voulez une formule :
NamesDefaultToHere(1);
// How many columns in the table?
nc = RandomInteger(2, 20);
// Build the table with some random data
dt = NewTable("Sum Columns", << addMultipleColumns("Col ", nc, Numeric));
for(c=1, c<=nc, c++, Column(dt, c) << setFormula(RandomNormal()));
dt << addRows(10);
dt << runFormulas;
// Start here with the current data table
dt2 = CurrentDataTable();
cols2 = dt2 << getColumnNames("Numeric");
// Add the row-wise sum as a new formula column
afc = Expr(dt2 << newColumn("Sum over Columns", Numeric, Continuous, Formula(Sum(colsTBD))));
SubstituteInto(afc, Expr(colsTBD), Eval(cols2));
afc;
(Cette publication était initialement incomplète).
Re : Somme de toutes les colonnes à l'aide d'une boucleSi je comprends bien, plutôt que de créer une boucle, vous pouvez exploiter "Tables > Résumé" et laisser JMP faire le travail :
NamesDefaultToHere(1);
// Get some data
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
// Get all the numeric columns
cols = dt << getColumnNames("Numeric");
// Get all the column means
dt2 = dt << Summary(Mean(cols));
Que ce soit mieux ou non peut dépendre de ce que votre JSL fait d'autre, mais en général, il est bon d'utiliser les plateformes JMP, surtout si des chiffres sont impliqués, même les plus simples.
Re : Somme de toutes les colonnes à l'aide d'une boucleJe dois ajouter que le script initialise dt et N comme suit :
dt = Current Data Table();
N = N Col( dt );