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 04/11/2011, 08h05   #1
Invité de passage
 
Homme
Inscription : octobre 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : octobre 2011
Messages : 5
Points : 0
Points : 0
Par défaut Calculer la somme de plusieurs enregistrement

Bonjour,


Je souhaiterai dans une étape data crée 2 variables :
Valeur_Date_Final qui vaut la somme de VAR1 pour chaque modalité de Date
Valeur_VAR0_Final qui vaut la somme de VAR1 pour chaque modalité de VAR0

Exemple :


Id Date VAR0 VAR1 Valeur_Date_Final Valeur_VAR0_Final
1 01/01/2009 A 100 300 100
1 01/01/2009 B 200 300 500
1 01/02/2009 B 300 600 500
1 01/02/2009 C 300 600 700
2 01/01/2009 C 400 500 700
2 01/01/2009 D 100 500 900
2 01/02/2009 D 300 800 900
2 01/02/2009 D 500 800 900


J’ai pensé a utiliser une proc SQL avec la fonction SUM et group by pour obtenir les valeurs mais je ne vois pas comment associé cette valeur au valeur précédente..

Exemple :

Comment associé la valeur 300 a l’observation
Id Date VAR0 VAR1 Valeur_Date_Final
1 01/01/2009 A 100 300

Merci de votre aide.

Louis
essai_sas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/11/2011, 09h32   #2
Invité de passage
 
Inscription : janvier 2011
Messages : 11
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 11
Points : 2
Points : 2
Hello !

En sql, c'est assez simple à faire. Il suffit d'utiliser un group by sur la variable Date.

Code :
1
2
3
4
5
PROC SQL ;
CREATE TABLE TEMP AS
SELECT *, SUM(VAR1) AS Nom_du_calcul FROM TA_TABLE
GROUP BY DATE ;
QUIT ;
Et tu fais la même chose pour ton deuxième calcul à partir de la table temp.

Après si tu veux absolument le faire en étape data, tu peux utiliser les retain mais c'est un peu plus compliqué...
Malex_SAS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2011, 16h11   #3
Invité de passage
 
Homme
Inscription : octobre 2011
Messages : 5
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : octobre 2011
Messages : 5
Points : 0
Points : 0
MERCI beaucoup

Louis
essai_sas est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2011, 17h52   #4
Membre habitué
 
Sébastien Ringuedé
Inscription : janvier 2011
Messages : 61
Détails du profil
Informations personnelles :
Nom : Sébastien Ringuedé
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : janvier 2011
Messages : 61
Points : 114
Points : 114
plus simple : tu construits deux tables de résultats au moyen de proc means que tu merges ensuite avec ta table de départ :

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
 
DATA test;
input ID date ddmmyy10. var0 $ var1 ;
format date ddmmyy10.;
cards;
1 01/01/2009 A 100
1 01/01/2009 B 200
1 01/02/2009 B 300
1 01/02/2009 C 300
2 01/01/2009 C 400
2 01/01/2009 D 100
2 01/02/2009 D 300
2 01/02/2009 D 500
;
 
proc means DATA=test;
class var0;
ways 1;
var var1;
output out=toto1(DROP=_type_ _freq_) sum=Valeur_VAR0_Final;
run;
 
proc means DATA=test;
class id date;
ways 2;
var var1;
output out=toto2(DROP=_type_ _freq_) sum=Valeur_Date_Final;
run;
 
proc sort DATA=test;
BY var0;
run;
 
DATA test1;merge test toto1;
BY var0;
run;
 
proc sort DATA=test1;
BY id date;
run;
 
DATA test2;merge test1 toto2;
BY id date;
run;
 
proc print;
run;
et tu obtiens :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
                                           Valeur_    Valeur_
                                            VAR0_      Date_
Obs    ID          date    var0    var1     Final      Final
 
 1      1    01/01/2009     A       100      100        300
 2      1    01/01/2009     B       200      500        300
 3      1    01/02/2009     B       300      500        600
 4      1    01/02/2009     C       300      700        600
 5      2    01/01/2009     C       400      700        500
 6      2    01/01/2009     D       100      900        500
 7      2    01/02/2009     D       300      900        800
 8      2    01/02/2009     D       500      900        800
a+

Sébastien Ringuedé
z6c3po 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 06h01.


 
 
 
 
Partenaires

Hébergement Web