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 :

Moyenne annuelle avec dates pouvant englober plusieurs années


Sujet :

SAS Base

  1. #1
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Points : 324
    Points
    324
    Par défaut Moyenne annuelle avec dates pouvant englober plusieurs années
    Bonjour à tous,

    Je dispose d'un fichier comprenant une variable d'intérêt prenant une valeur différente à chaque pas de temps. Ces pas de temps sont définis avec 2 variables : date_deb et date_fin.
    Ainsi cette table ressemble à ça :
    date_deb date_fin variable_interet
    01/01/2000 31/12/2000 100
    01/01/2001 30/06/2001 110
    01/07/2001 31/12/2001 120
    01/01/2002 30/09/2005 130
    01/10/2005 28/02/2006 140
    01/03/2006 31/12/2006 150
    01/01/2007 31/12/2007 155

    J'aimerais calculer la moyenne annuelle de ma variable d'intérêt pour chaque année entre ma première année et ma dernière année. Si mes dates de début et de fin étaient toujours sur une même année, je pourrais calculer un intervalle de temps puis faire une moyenne pondérée par cette intervalle de temps en groupant selon l'année, mais j'ai quelques fois des intervalles de temps qui englobent plusieurs années.

    Dans l'idéal, je souhaiterais même ne pas fonctionner avec un nombre de jours, mais uniquement de mois afin que la moyenne annuelle ne soit pas sensible aux mois plus courts, mes dates étant tout le temps définies avec une date_debut au premier du mois, et une date_fin à la fin d'un mois. Ce problème est moins important cependant.

    Je n'arrive pas à trouver de manière de faire (à moins peut-être d'une usine à gaz du genre, faire une boucle partant de l'année la plus ancienne à l'année la plus récente et, pour chaque année, effectuer le calcul en parcourant toute la table à chaque fois...) Avant de me lancer dans l'écriture d'un code long et fastidieux, peut-être que quelqu'un aurait une idée pour me débloquer ?

    Par avance merci !

  2. #2
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Points : 324
    Points
    324
    Par défaut
    Finalement, la pause midi porte conseil. L'idée usine à gaz n'est pas si horrible que ça :

    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
    data test2;
    set test;
    	if year(date_deb)=year(date_fin) then do;
    		annee=year(date_deb);
    		mois=month(date_fin)+1-month(date_deb);
    		vari = var_interet;
    		output;
    	end;
    	else do an=year(date_deb) to year(date_fin);
    		annee = an;
    		mois = (an ne year(date_fin))*(13-(month(date_deb)*(an=year(date_deb))+1*(an ne year(date_deb))))
     				+ (an=year(date_fin))*month(date_fin);
    		vari = var_interet;
    		output;
    	end;
    	keep annee mois vari;
    run;
    proc sql;
    create table test3 as
    select annee, sum(vari*mois/12) as vari_MA
    from test2
    group by annee;
    quit;
    Et ça a l'air de bien marcher !!

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 11/06/2014, 14h22
  2. [XL-2010] Nom de fichier automatique avec date en format Jour mois année
    Par chipster62 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/02/2014, 21h17
  3. Réponses: 3
    Dernier message: 03/04/2013, 20h15
  4. [AC-2003] Fonction de moyenne pondéré avec plusieurs conditions
    Par Piccou dans le forum VBA Access
    Réponses: 34
    Dernier message: 14/08/2009, 13h07
  5. Réponses: 4
    Dernier message: 25/11/2005, 19h15

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