Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS Base
SAS Base Forum d'entraide sur SAS base : étape data, procédures non statistiques, procédures non graphiques, SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/03/2008, 10h46   #1
Nouveau Membre du Club
 
Inscription : mai 2007
Messages : 158
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 158
Points : 37
Points : 37
Par défaut Problème de somme cumulée

Bonjour,

Je dois réalisée une somme cumulée sous SAS en tenant compte. Le cumul doit se faire sur les 12 mois de chaque annee et par identifiant. Je n e sais pas trop comment m'y prendre peut on m'aider???

Merci d'avance et bonne journée
CélineM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2008, 11h21   #2
Membre Expert
 
Inscription : mars 2005
Messages : 1 028
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 028
Points : 1 278
Points : 1 278
Envoyer un message via Yahoo à bahraoui
Bonjour,
Je t'invite à consulter le lien suivant http://www.developpez.net/forums/sho...d.php?t=516401
Je crois que cela répond à ton problème. Sinon fournit un exemple de données en entrée et les résultats.

Cordialement.
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2008, 12h00   #3
Nouveau Membre du Club
 
Inscription : mai 2007
Messages : 158
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 158
Points : 37
Points : 37
En fait le soucis est que j'ai je voudrai calculer la somme cumulée du nb_adhe par mois par exemple pour chaque annee et chaque bureau ??? Est ce plus clair???

annee mois code nb_adhe
2003 1 0101 13
2003 1 0102 7
2003 1 0103 2
2003 1 0104 4
2003 1 0105 0
2003 2 0101 6
2003 2 0102 2
2003 2 0103 1
2003 2 0104 1
2003 2 0105 0
2004 1 0101 14
2004 1 0102 10
2004 1 0103 1
2004 1 0104 5
2004 1 0105 3
2004 2 0101 7
2004 2 0102 5
2004 2 0103 2
2004 2 0104 1
2004 2 0105 1
CélineM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2008, 12h23   #4
Membre Expert
 
Inscription : mars 2005
Messages : 1 028
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 028
Points : 1 278
Points : 1 278
Envoyer un message via Yahoo à bahraoui
Est ce que tu peux donner la tabl résultats attendus, tu veux dire quoi par "somme cumulée du nb_adhe par mois par exemple pour chaque annee et chaque bureau"?
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2008, 13h07   #5
Nouveau Membre du Club
 
Inscription : mai 2007
Messages : 158
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 158
Points : 37
Points : 37
annee mois code nb_adhe somme cumulée
2003 1 0101 13 13
2003 1 0102 7 7
2003 1 0103 2 2
2003 1 0104 4 4
2003 1 0105 0 0
2003 2 0101 6 13+6=19
2003 2 0102 2 7+2=9
2003 2 0103 1 2+1=3
2003 2 0104 1 4+1=5
2003 2 0105 10 0+10=10
2004 1 0101 14 14
2004 1 0102 10 10
2004 1 0103 1 1
2004 1 0104 12 12
2004 1 0105 3 3
2004 2 0101 7 21
2004 2 0102 5 15
2004 2 0103 2 3
2004 2 0104 1 13....

En fait je veux cumulé le nombre d'adhérents sur les 12 mois pour chaque annee mais en tenant compte du code adhérents je sais pas si c'est plus clair comme ca???
CélineM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2008, 14h00   #6
Membre Expert
 
Inscription : mars 2005
Messages : 1 028
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 028
Points : 1 278
Points : 1 278
Envoyer un message via Yahoo à bahraoui
tu veux une table comme ça?
2003 0101 13+6=18
2003 0102 7+2=9
2003 0103 2+1=3
2003 0104 4+1=5
2003 0105 0+0=0
2004 0101 14+7=21
2004 0102 10+5=15
2004 0103 1+2 =3
2004 0104 5+1 =6
2004 0105 3+1 =4

Code :
1
2
3
4
5
6
7
 
proc sql;
CREATE TABLE titi AS
SELECT annee, code,sum(nb_adhe) AS somme_nb_adhe
FROM toto
GROUP BY annee, code;
quit;
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2008, 14h20   #7
Nouveau Membre du Club
 
Inscription : mai 2007
Messages : 158
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 158
Points : 37
Points : 37
je suis désolée, mais c'est pas tout à fais ca et même avec ta version, je n'arrive pas ou je veux!!!
en fête, il faut aussi ventilé par mois et à partir de cela le cumul ne se fait plus. Je sais pas si en fait ce que je veux est possible
CélineM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2008, 15h01   #8
Membre Expert
 
Inscription : mars 2005
Messages : 1 028
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 028
Points : 1 278
Points : 1 278
Envoyer un message via Yahoo à bahraoui
Est ce que c'est possible de me donner la table finale que tu veux?
avec le bon nombre d'observations et les régles de calculs...
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2008, 15h39   #9
Nouveau Membre du Club
 
Inscription : mai 2007
Messages : 158
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 158
Points : 37
Points : 37
Voici la table
Annee Mois Code_adh Nb_adherent somme
2003 1 0101 13 13
2003 1 0102 7 7
2003 1 0103 2 2
2003 1 0104 4 4
2003 1 0105 0 0
2003 2 0101 6 19
2003 2 0102 2 9
2003 2 0103 1 3
2003 2 0104 1 5
2003 2 0105 0 0
2003 3 0101 12 31
2003 3 0102 4 13
2003 3 0103 3 6........
2003 3 0104 5
2003 3 0105 8
2003 4 0101 8
2003 4 0102 5
2003 4 0103 2
2003 4 0104 2
2003 4 0105 1
2003 5 0101 8
2003 5 0102 4
2003 5 0103 2
2003 5 0104 2
2003 5 0105 7
2003 6 0101 16
2003 6 0102 6
2003 6 0103 3
2003 6 0104 1
2003 6 0105 7
2003 7 0101 13
2003 7 0102 3
2003 7 0103 4
2003 7 0104 4
2003 7 0105 4
2003 8 0101 8
2003 8 0102 4
2003 8 0103 1
2003 8 0104 4
2003 8 0105 6
2003 9 0101 21
2003 9 0102 6
2003 9 0103 3
2003 9 0104 6
2003 9 0105 9
2003 10 0101 17
2003 10 0102 7
2003 10 0103 1
2003 10 0104 6
2003 10 0105 3
2003 11 0101 5
2003 11 0102 5
2003 11 0103 5
2003 11 0104 1
2003 11 0105 0
2003 12 0101 11
2003 12 0102 5
2003 12 0103 3
2003 12 0104 3
2003 12 0105 1
2004 1 0101 14
2004 1 0102 10
2004 1 0103 1
2004 1 0104 5
2004 1 0105 3
2004 2 0101 7
2004 2 0102 5
2004 2 0103 2
2004 2 0104 1
2004 2 0105 1
2004 3 0101 14
2004 3 0102 9
2004 3 0103 4
2004 3 0104 4
2004 3 0105 8
2004 4 0101 8
2004 4 0102 5
2004 4 0103 3
2004 4 0104 5
2004 4 0105 4
2004 5 0101 10
2004 5 0102 2
2004 5 0103 4
2004 5 0104 3
2004 5 0105 4
2004 6 0101 10
2004 6 0102 5
2004 6 0103 2
2004 6 0104 4
2004 6 0105 6
2004 7 0101 19
2004 7 0102 6
2004 7 0103 2
2004 7 0104 3
2004 7 0105 11
2004 8 0101 22
2004 8 0102 5
2004 8 0103 2
2004 8 0104 7
2004 8 0105 7
2004 9 0101 14
2004 9 0102 2
2004 9 0103 2
2004 9 0104 4
2004 9 0105 3
2004 10 0101 14
2004 10 0102 10
2004 10 0103 1
2004 10 0104 2
2004 10 0105 2
2004 11 0101 14
2004 11 0102 8
2004 11 0103 1
2004 11 0104 0
2004 11 0105 3
2004 12 0101 5
2004 12 0102 5
2004 12 0103 3
2004 12 0104 3
2004 12 0105 4

Enfin je veux une nouvelle colonne appellé somme qui lorsque l'annee sera la meme et le code_adherent le meme, je veux le cumul du nombre d'adhérent
CélineM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2008, 16h08   #10
Membre Expert
 
Inscription : mars 2005
Messages : 1 028
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 028
Points : 1 278
Points : 1 278
Envoyer un message via Yahoo à bahraoui
Je crois que ce programme répond à ton problème
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
 
DATA toto;
input annee mois code nb_adhe;
cards;
2003 1 0101 13
2003 1 0102 7 
2003 1 0103 2 
2003 1 0104 4 
2003 1 0105 0 
2003 2 0101 6 
2003 2 0102 2 
2003 2 0103 1 
2003 2 0104 1 
2003 2 0105 0 
2003 3 0101 12
2003 3 0102 4 
2003 3 0103 3 
2003 3 0104 5 
2003 3 0105 8 
2003 4 0101 8 
2003 4 0102 5 
2003 4 0103 2 
2003 4 0104 2 
2003 4 0105 1 
2003 5 0101 8 
2003 5 0102 4 
2003 5 0103 2 
2003 5 0104 2 
2003 5 0105 7 
2003 6 0101 16 
2003 6 0102 6 
2003 6 0103 3 
2003 6 0104 1 
2003 6 0105 7 
2003 7 0101 13 
2003 7 0102 3 
2003 7 0103 4 
2003 7 0104 4
2003 7 0105 4 
2003 8 0101 8 
2003 8 0102 4 
2003 8 0103 1 
2003 8 0104 4 
2003 8 0105 6 
2003 9 0101 21 
2003 9 0102 6 
2003 9 0103 3 
2003 9 0104 6 
2003 9 0105 9 
2003 10 0101 17 
2003 10 0102 7 
2003 10 0103 1
2003 10 0104 6 
2003 10 0105 3 
2003 11 0101 5 
2003 11 0102 5 
2003 11 0103 5 
2003 11 0104 1 
2003 11 0105 0 
2003 12 0101 11 
2003 12 0102 5 
2003 12 0103 3
2003 12 0104 3 
2003 12 0105 1 
2004 1 0101 14 
2004 1 0102 10 
2004 1 0103 1 
2004 1 0104 5
2004 1 0105 3 
2004 2 0101 7 
2004 2 0102 5 
2004 2 0103 2 
2004 2 0104 1 
2004 2 0105 1 
2004 3 0101 14 
2004 3 0102 9 
2004 3 0103 4 
2004 3 0104 4 
2004 3 0105 8 
2004 4 0101 8 
2004 4 0102 5 
2004 4 0103 3 
2004 4 0104 5 
2004 4 0105 4 
2004 5 0101 10 
2004 5 0102 2 
2004 5 0103 4
2004 5 0104 3 
2004 5 0105 4 
2004 6 0101 10 
2004 6 0102 5 
2004 6 0103 2 
2004 6 0104 4 
2004 6 0105 6 
2004 7 0101 19 
2004 7 0102 6 
2004 7 0103 2 
2004 7 0104 3
2004 7 0105 11 
2004 8 0101 22 
2004 8 0102 5 
2004 8 0103 2 
2004 8 0104 7 
2004 8 0105 7 
2004 9 0101 14 
2004 9 0102 2 
2004 9 0103 2 
2004 9 0104 4 
2004 9 0105 3 
2004 10 0101 14 
2004 10 0102 10 
2004 10 0103 1 
2004 10 0104 2 
2004 10 0105 2 
2004 11 0101 14 
2004 11 0102 8 
2004 11 0103 1 
2004 11 0104 0 
2004 11 0105 3 
2004 12 0101 5 
2004 12 0102 5 
2004 12 0103 3 
2004 12 0104 3 
2004 12 0105 4 
 
;
run;
%macro test;
OPTION mprint;
/*creation des macro variables : autant de macr variables que de lignes
annee1, annee2....annee_nb_obs_table
mois1, mois2....mois_nb_obs_table
code1, code2....code_nb_obs_table*/
DATA _null_;
SET toto;
call symput('annee'||trim(LEFT(_n_)),annee);
call symput('mois'||trim(LEFT(_n_)),mois);
call symput('code'||trim(LEFT(_n_)),code);
call symput('nb',_n_);/*Nombre d'observations de la table*/
run;
/*boucle de 1 au nombre d'obs de la table*/
/*creation de nb tables je calcul la somme des nombre d'adherent pour une année et code et je fais la somme des nb_adh antécedents*/
%do i=1 %TO &nb;
 
	proc sql;
	CREATE TABLE t_&i AS
	SELECT 	*,sum(nb_adhe) AS somme_nb_adhe 
	FROM toto
	WHERE 	annee=&&annee&i
	AND		mois<=&&mois&i
	AND		code=&&code&i
	GROUP BY annee,code;
	quit;
%end;
/*je consolide les resultats dans une seul table */
DATA fin; SET %do i=1 %TO &nb;
			t_&i
			%end;;
run;
/*suppression des doublons crées dans la proc sql*/
proc sort DATA=fin nodupkey; BY annee mois code nb_adhe;run;
%mend;
%test;
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2008, 16h28   #11
Nouveau Membre du Club
 
Inscription : mai 2007
Messages : 158
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 158
Points : 37
Points : 37
Tout d'abord merci de prendre du temps pour me répondre c'est super sympa car je suis dans une glère monstre et je ne sais pas comment m'en sortir
peut tu m'indiquer les paramètres à mettre en entree et sortie pour lancer la macro et m'expliquer un peu les étapes car je ne connais pas certaine instruction.

Merci beaucoup
CélineM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2008, 16h33   #12
Membre Expert
 
Inscription : mars 2005
Messages : 1 028
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 028
Points : 1 278
Points : 1 278
Envoyer un message via Yahoo à bahraoui
La macro n'a besoin que de la table de données "toto" pour focntionner.
En ce qui concerne les explications, je vais le faire ce soir si j'ai assez de temps.
Il ne faut oublier de cliquer sur le bouton 'RESOLU' si la réponse est bonne.
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2008, 16h40   #13
Nouveau Membre du Club
 
Inscription : mai 2007
Messages : 158
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 158
Points : 37
Points : 37
pas de souci mais pour l'instant ca tourne vu que ma table était assez lourdemais promis si c résolu je validerai les réponses... Merci encore d'avoir pris du temps et bonne soirée
CélineM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2008, 16h45   #14
Membre Expert
 
Inscription : mars 2005
Messages : 1 028
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 028
Points : 1 278
Points : 1 278
Envoyer un message via Yahoo à bahraoui
tu me tiens au courant des résultats.

Bon courage
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2008, 17h53   #15
Nouveau Membre du Club
 
Inscription : mai 2007
Messages : 158
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 158
Points : 37
Points : 37
La macro n'a pas fonctionné, donc j'ai résolu mon problème en créant une table pour chaque code adhérents et ainsi j'ai pus calculer ma somme cumulée en prenant comme condition seulement la variable mois.
Merci quand même et bonne soirée
CélineM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2008, 19h30   #16
Membre Expert
 
Inscription : mars 2005
Messages : 1 028
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 028
Points : 1 278
Points : 1 278
Envoyer un message via Yahoo à bahraoui
désolé, j'ai ajouté qq commentaires dans le code.
Je suis à ta disposition pour plus d'infos.
Cordialement
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h45.


 
 
 
 
Partenaires

Hébergement Web