IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SAS Base Discussion :

Calculer la somme de plusieurs enregistrement


Sujet :

SAS Base

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Points : 4
    Points
    4
    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

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Hello !

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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é...

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    MERCI beaucoup

    Louis

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 133
    Points : 371
    Points
    371
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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é

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2008R2] Calcul de durée entre plusieurs enregistrements dans une même table
    Par mikmik60 dans le forum Développement
    Réponses: 2
    Dernier message: 20/10/2014, 13h28
  2. [AC-2003] Calcul / Somme de plusieurs champs d'une même table
    Par HenriJ dans le forum Access
    Réponses: 2
    Dernier message: 26/03/2014, 17h48
  3. Réponses: 3
    Dernier message: 13/11/2012, 13h36
  4. [AC-2000] Calculs sur champs de plusieurs enregistrements
    Par 31KIKI dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 31/08/2012, 16h49
  5. Calcul basé sur plusieurs enregistrements
    Par Zinemon dans le forum IHM
    Réponses: 3
    Dernier message: 02/10/2007, 13h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo