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

Débutez Discussion :

Date mensuelle sous SAS?


Sujet :

Débutez

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Date mensuelle sous SAS?
    Bonsoir à tous!

    Voici mon petit soucis... Cela fait depuis deux jours que j'essaie d'utiliser cette base de données ( http://www.econ.yale.edu/~shiller/data/ie_data.xls ) afin d'étudier le lien entre deux variables (CAPE et taux d'intérêt à long terme qui sont dans l'excel ci-dessus parmi d'autres variables).

    Seul soucis, les dates sont dans un format bizarre... Les données sont mensuelles et débutent en 1871,01 (pour janvier 1871), avec pour le mois d'octobre du coup 1871,1.

    Voici comment je procède:
    1. j'importe le fichier excel grâce à la "proc import" après avoir nettoyé sous excel les premières lignes afin de conserver le nom des variables sur la première ligne. J'obtiens donc toutes les variables du fichier excel.

    2. Je souhaite transformer les dates en passant par SAS en format MONYY7. mais je dois mal m'y prendre car ça ne fonctionne pas comme je le souhaiterais... Par exemple 1871,01 se transforme en FEB1965 et il en va de même pour les 180 dates suivantes, puis ça passe à MAR1965 pour les 180 suivantes etc... Pour faire cela, j'utilise dans l'étape data "informat date MONYY7.;".

    Connaissez-vous une autre solution sous SAS pour transformer ce nombre en date MONYY7.?

    J'ai tenté également de créer une table vide pour créer les dates au format voulu sur la période souhaitée puis merger le tout. Mais je n'arrive pas à les créer sous le format mensuelle... Le format journalier fonctionne grâce au code fourni par hammamr dans un topic de 2009:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DATA work.liste_dates ;
       format date ddmmyy10. ; /* Format d'affichage JJ/MM/AAAA */
     
       do date='01jan2000'd TO '31jan2009'd ; 
          output work.liste_dates ; /* Ecriture dans la table en sortie (liste_dates) */
       end ;
    run ;
    Mais quand je tente de l'adapter à ma situation il ne fonctionne pas....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DATA work.liste_dates ;
    format date MONYY7. ; 
    do date='JAN1871'd TO 'APR2012'd ; 
    output work.liste_dates ;
    end ;
    run ;
    Si vous avez des idées je suis preneuse.. J'aimerais autant que faire se peut importer le fichier excel et le retravailler exclusivement avec SAS.

    Merci beaucoup de m'avoir lu ^^

  2. #2
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Bonjour,
    J'espere que ça répond à ton problème:

    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 date_;
    input date $;
    cards;
    1871,01
    1871,02
    1871,03
    1871,04
    1871,05
    1871,06
    1871,07
    1871,08
    1871,09
    1871,1
    1871,11
    1871,12
    1872,01
    1872,02
    1872,03
    1872,04
    1872,05
    1872,06
    1872,07
    ;run;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    data date_;
    set date_;
    annee=scan(date,1,',');
    mois=scan(date,2,',');
    jour='01';
    date2=mdy(input(mois,best.),input(jour,best.),input(annee,best.));
    format date2 monyy7.;
    run;

  3. #3
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Et si ta proc Import a récupéré la date dans une variable numérique, il faut faire un peu de maths : MOD(x,1) renvoie la partie décimale d'un nombre x, tandis que INT(x) isole la partie entière. On reconstruit alors la date avec MDY.
    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
    DATA date_;
    input date :NUMX. ;
    cards;
    1871,01
    1871,02
    1871,03
    1871,04
    1871,05
    1871,06
    1871,07
    1871,08
    1871,09
    1871,1
    1871,11
    1871,12
    1872,01
    1872,02
    1872,03
    1872,04
    1872,05
    1872,06
    1872,07
    ;run;
    DATA work.mois ;
      SET work.date_ ;
      date2 = MDY(MOD(date,1)*100,
                  1,
    			  INT(date)) ;
      FORMAT date2 MONYY7. ;
    RUN ;

  4. #4
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Je plains les gens qui disent que les maths ne servent à rien

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup pour vos réponses!

    Je viens de tester vos deux méthodes.

    Concernant celle de MEGAMIND2, je n'arrive pas à la faire fonctionner :s. J'obtiens une colonne date qui n'a aucune valeur. En fait, ça ne reconnaît ni l'année ni le mois vu que ces colonnes sont également vides. Ah! Après avoir remplacé , par . ça identifie c'est bon! Sauf que pour le mois d'octobre (1871,1) il identifie le 1 comme étant le mois de janvier (comme pour 01).

    Concernant la méthode de Olivier.Decourt, elle fonctionne nickel .

    Encore un grand merci à tous les deux! Du coup je me demande pourquoi dans le premier cas cela ne me renvoie pas OCT pour le 1 alors que dans le second oui? Les maths seraient-elles les plus fortes? ^^

  6. #6
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    J'avais pas compris que 1=Oct, donc fallait rajouter :si mois=1 then mois=10

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    DATA date_;
    SET date_;
    annee=scan(date,1,',');
    mois=scan(date,2,',');
    if mois='1' then mois='10';
    jour='01';
    date2=mdy(input(mois,best.),input(jour,best.),input(annee,best.));
    format date2 monyy7.;
    run;
    Mais la méthode d'Olivier est plus simple.

  7. #7
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Super, ta méthode fonctionne également!
    Même si la méthode d'Olivier est plus simple, il est toujours très intéressant de voir comment se construisent les autres méthodes je trouve. J'ai appris à quoi servait scan du coup.

    Merci encore à tous les deux!

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

Discussions similaires

  1. Les dates sous sas
    Par salmabarik dans le forum SAS Base
    Réponses: 4
    Dernier message: 14/02/2014, 16h57
  2. Import date/heure sous SAS
    Par ninon10 dans le forum SAS Base
    Réponses: 1
    Dernier message: 25/08/2010, 10h14
  3. requete date sous sas
    Par ghatfan99 dans le forum SAS Base
    Réponses: 3
    Dernier message: 30/04/2009, 14h18
  4. Problème de date sous sas
    Par feragne dans le forum SAS Base
    Réponses: 8
    Dernier message: 05/09/2008, 14h00
  5. compteur mensuel sous access
    Par nabildjadel dans le forum Access
    Réponses: 8
    Dernier message: 29/10/2004, 01h15

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