Additionner des valeurs spécifiques dans certaines lignes/colonnesBonjour à tous,
Je travaille avec une table de données bizarrement disposée. Si vous voyez le tableau ci-dessous (pas de données réelles, mais une ressemblance), j'ai besoin de trouver la somme de tous les nombres rouges, puis la somme de tous les nombres verts. De préférence, une colonne supplémentaire sera créée et chaque ligne pour Bob lira la somme rouge, et chaque ligne pour Bill lira la somme verte. Quelqu'un pourrait-il me donner un aperçu de la façon dont je pourrais procéder?
| Nom | Âge | Essai 1 | Essai 2 | Essai 3 |
| Bob | 1 | dix | 22 | 34 |
| Bob | 1 | dix | 22 | 34 |
| Bob | 2 | 12 | 24 | 36 |
| Bob | 2 | 12 | 24 | 36 |
| Bob | 3 | 14 | 26 | 38 |
| Bob | 3 | 14 | 26 | 38 |
| Facture | 1 | 16 | 28 | 40 |
| Facture | 1 | 16 | 28 | 40 |
| Facture | 2 | 18 | 30 | 42 |
| Facture | 2 | 18 | 30 | 42 |
| Facture | 3 | 20 | 32 | 44 |
| Facture | 3 | 20 | 32 | 44 |
Merci d'avance!
Re : Somme de valeurs spécifiques dans certaines lignes/colonnesTrès utile! Merci!!
Re : Somme de valeurs spécifiques dans certaines lignes/colonnesJe suis désolé, mais dans ma hâte, je n'ai pas remarqué le fait que les lignes sont de véritables doublons (comme vous l'avez peut-être vu dans mon exemple). Je n'ai pas non plus apprécié que vous vouliez additionner sur des colonnes.
Si vous pouvez compter sur cette duplication stricte, alors vous pourriez faire :
NamesDefaultToHere(1);
// Make some test data: Note that pairs of rows are duplicates!
dt = New Table( "Test Data",
New Column( "Group", Numeric, "Nominal", Values([1,1,1,1,1,1,2,2,2,2,2,2])),
New Column( "Test 1", Numeric, "Ordinal", Values([2,2,3,3,4,4,5,5,6,6,7,7])),
New Column( "Test 2", Numeric, "Ordinal", Values([1,1,2,2,3,3,4,4,5,5,6,6]))
);
// List of columns for Summary
colList = {:Test 1, :Test 2};
// Summary
dt2 = dt << Summary(Group( :Group ), Sum( Eval(colList) ), StatisticsColumnNameFormat("column"));
// Sum over the columns in the summary, but also divide by 2 to account for the duplicate rows in dt
// (1) Template exprtession
CMD = Expr(dt2 << New Column( "Required Sum", Numeric, "Continuous", Formula( Sum(colsTBD) / 2 )));
// (2) Substitute in the columns we have
SubstituteInto(CMD, Expr(colsTBD), Eval(colList));
// (3) Use the expression we have built
CMD;
Re : Somme de valeurs spécifiques dans certaines lignes/colonnesMerci,
Cependant, disons que je voulais simplement ajouter toutes les valeurs d'une ligne spécifique pour une plage de colonnes. J'ai trouvé ce bout de code ci-dessous qui, je pense, ajoute toutes les cellules d'une ligne entre les colonnes numéro TR et TD. Cependant, il renvoie simplement la valeur de la cellule TD. Pourquoi est-ce et comment puis-je le faire fonctionner?
TotRow = dt << Obtenir les noms de colonne (numérique);
TR = N éléments (TotRow);
TD = N Items(colnamesSix);
dt << Nouvelle colonne("Total", Numérique);
Pour chaque ligne( :Total[] = Sum( Column(TotRow[TD :: TR])[]) );
Re : Somme de valeurs spécifiques dans certaines lignes/colonnesNe pourriez-vous pas utiliser Analyser - Tabuler ?Mettez le nom suivi de l'âge dans les lignes, puis utilisez la moyenne du test 1 (et les colonnes du test 2 et du test 3 également) - la moyenne sert à éviter de compter deux fois les valeurs en double.Ensuite, faites-en une table de données.À partir de là, vous êtes presque là où vous voulez être.
Re : Somme de valeurs spécifiques dans certaines lignes/colonnesDans le cas simple d'un nombre pair de lignes dans chaque groupe, vous pouvez faire quelque chose comme ceci :
NamesDefaultToHere(1);
// Make some test data
dt = New Table( "Test Data",
Add Rows( 20 ),
New Column( "Group", Numeric, "Nominal", Values(VConcat(J(10, 1, 1), J(10, 1, 2)))),
New Column( "Test 1", Numeric, "Ordinal", Values(J(20, 1, RandomInteger(1,30)))),
New Column( "Test 2", Numeric, "Ordinal", Values(J(20, 1, RandomInteger(1,100))))
);
// Add a 'Subgroup' column
dt << NewColumn("Subgroup", Numeric, Nominal, Values(Repeat((1::2)`, 10)));
// Make a summary table
dt2 = dt << Summary(Group( :Group, :Subgroup ), Sum( :Test 1 ), Sum( :Test 2 ));
dt2 << selectWhere(:Subgroup == 2);
dt2 << hideAndExclude;
dt2 << clearSelect;Re : Somme de valeurs spécifiques dans certaines lignes/colonnesOui! C'est exactement ce dont j'ai besoin.
Re : Somme de valeurs spécifiques dans certaines lignes/colonnesAvez-vous besoin des sommes pour chaque deuxième ligne (en commençant par la première), dans chaque groupe défini par les valeurs dans 'Name' ?