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 :

Utilisation de retain


Sujet :

SAS Base

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 33
    Points : 34
    Points
    34
    Par défaut Utilisation de retain
    Bonjour,
    je cherche à modifier sans succès un code. Le code ci-dessous permet de cumuler par mois tous les montants versés à des dates antérieures, le mois en cours compris (janvier=10+15=25, fevrier=janvier+100=125)

    Je cherche à effectuer un simple cumul mensuel (le montant d'un mois est égal au cumul des montants du mois, les montants des mois précédents ne sont pas pris en compte).(janvier=10+15=25, fevrier=100)

    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
    Data entree ;
    format Date_Reglement Date_Rgl_fin_mois ddmmyy10.;id='0000000001';
    Date_Reglement= '01JAN2008'd; Date_Rgl_fin_mois ='31JAN2008'd; Montant_Reglement=10.0; output;
    Date_Reglement= '05JAN2008'd; Date_Rgl_fin_mois ='31JAN2008'd; Montant_Reglement=15.0; output;
    Date_Reglement= '07FEB2008'd; Date_Rgl_fin_mois ='28FEB2008'd; Montant_Reglement=100.0; output;
    Date_Reglement= '09MAR2008'd; Date_Rgl_fin_mois ='31MAR2008'd; Montant_Reglement=150.0; output;
    Date_Reglement= '15MAR2008'd; Date_Rgl_fin_mois ='31MAR2008'd; Montant_Reglement=210.0; output;
    id='0000000002';
    Date_Reglement= '01JAN2008'd; Date_Rgl_fin_mois ='31JAN2008'd; Montant_Reglement=410.0; output;
    Date_Reglement= '05JAN2008'd; Date_Rgl_fin_mois ='31JAN2008'd; Montant_Reglement=415.0; output;
    Date_Reglement= '07FEB2008'd; Date_Rgl_fin_mois ='28FEB2008'd; Montant_Reglement=4100.0; output;
    Date_Reglement= '09MAR2008'd; Date_Rgl_fin_mois ='31MAR2008'd; Montant_Reglement=4150.0; output;
    Date_Reglement= '15MAR2008'd; Date_Rgl_fin_mois ='31MAR2008'd; Montant_Reglement=4210.0; output;
     
    run;
     
    data sortie(rename=(cum=cumul_rgl) drop=Montant_Reglement);
      set entree;
      by id Date_Rgl_fin_mois;
      retain cum;
      if first.nogs then do;
          cum=Montant_Reglement;
          if last.id or last.Date_Rgl_fin_mois then output;  
      end;
      else do;
          cum=sum(cum, Montant_Reglement);
          if last.Date_Rgl_fin_mois then output;
      end;
    run;
    Merci pour votre aide.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Attaché statisticien
    Inscrit en
    Mai 2011
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Attaché statisticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 687
    Points : 1 581
    Points
    1 581
    Par défaut
    Bonjour,

    deux solutions

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    DATA Sortie;
    SET entree;
    RETAIN CUMUL ;
    IF First.Date_Rgl_fin_mois THEN CUMUL=0;
    BY id Date_Rgl_fin_mois;
    CUMUL+Montant_Reglement;
    IF Last.Date_Rgl_fin_mois;
    KEEP Date_Rgl_fin_mois id CUMUL;
    RUN;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    PROC SUMMARY DATA=Entree;
    CLASS ID Date_Rgl_fin_mois;
    VAR Montant_Reglement;
    TYPES ID*Date_Rgl_fin_mois;
    OUTPUT OUT=Sortie2(drop=_type_ _freq_) SUM=;
    RUN;

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 33
    Points : 34
    Points
    34
    Par défaut Merci
    Merci beaucoup pour votre aide.

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

Discussions similaires

  1. [DATA] Utilisation des instructions retain first et last
    Par AL212 dans le forum SAS Base
    Réponses: 10
    Dernier message: 12/02/2015, 16h16
  2. Utilisation de do while ou retain
    Par Olive2011 dans le forum SAS Base
    Réponses: 3
    Dernier message: 13/03/2013, 21h23
  3. [DATA] Utilisation de retain
    Par labuche1138 dans le forum SAS Base
    Réponses: 3
    Dernier message: 09/01/2013, 19h20
  4. Réponses: 24
    Dernier message: 27/04/2011, 16h00

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