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 :

Créer une table "CALENDRIER"


Sujet :

SAS Base

  1. #1
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 155
    Points : 77
    Points
    77
    Par défaut Créer une table "CALENDRIER"
    Bonjour le forum,

    À partir de rien, j'ai besoin de créer une table s'apparentant à un calendrier, avec des dates et surtout des formats bien précis.
    J'ai besoin :
    - du jour de l'année au format yyyymmdd
    - de la semaine de l'année au format yyyymm

    Et c'est bien ce dernier format qui me pose problème, puisqu'il ne semble pas exister tel quel dans SAS. (Si !?).

    Ci-dessous mon code actuel, s'approchant de la solution. Mais on voit bien qu'il y a un problème au 31/12/2018 par exemple : soit je récupère la bonne info mais pas au bon format dans la variable semaine, soit je récupère le bon format mais la mauvaise info, dans la variable semaine_ko.

    J'ai testé pas mal de substr, de scan, de format,.... rien n'y fait....

    Merci !!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    data semaine (drop = i);
    	format dtwa yymmddn8. semaine weekv.;
    	do i = 1 to intck('DAY', '01jan2013'd, today());
    		dtwa = '31dec2012'd + i;
    		semaine_ko = cats(year(dtwa), put(week(dtwa,'v'),z2.));
    		semaine = dtwa;
    		test_annee = year(semaine);
    		output;
    	end;
    run;

  2. #2
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Créer une table "CALENDRIER"
    Bonjour,

    • Votre programme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    data semaine(drop = i);
      format dtwa yymmddn8. semaine weekv.;
      do i = 1 to intck('DAY', '01jan2013'd, today());
        dtwa = '31dec2012'd + i;
        semaine_ko = cats(year(dtwa), put(week(dtwa,'v'),z2.));
        semaine = dtwa;
        test_annee = year(semaine);
        output;
      end;
    run;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                               semaine_    test_
        dtwa      semaine         ko       annee
    20181231    2019-W01-01     201801      2018
    La fonction year() renvoie l'année de la date initiale, ce qui ne convient pas.

    • Le format yyyyww ne correspond pas à la norme ISO 8601 qui spécifie la représentation numérique de la date et de l'heure, ce qui explique la difficulté à le générer.

    Une proposition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    data semaine(drop = i);
      format dtwa yymmddn8.;
      do i = 1 to intck('DAY', '01jan2013'd, today());
        dtwa = '31dec2012'd + i;
        dt_isoW_txt = strip(put(dtwa,weekv.));
        semaine = input(compress(substr(dt_isoW_txt,1,4) || substr(dt_isoW_txt,7,2)),8.);
        output;
      end;
    run;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        dtwa    dt_isoW_txt    semaine
    20181231    2019-W01-01     201901
    • Lien utile : Convertir une variable numérique en caractère

    Cordialement,

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 482
    Points : 1 547
    Points
    1 547
    Par défaut
    Bonjour,
    Une 2ème proposition avec une petite modification à ton code. On récupère l'année de la variable dtwa de format "weekv".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    data semaine(drop = i);
      format dtwa yymmddn8. semaine weekv.;
      do i = 1 to intck('DAY', '01jan2013'd, today());
        dtwa = '31dec2012'd + i;
        semaine_ko = cats(year(dtwa), put(week(dtwa,'v'),z2.));
        SEMAINE_OK = cats(input(put(dtwa, weekv.) 4.),  put(week(dtwa,'v'),z2.));
        semaine = dtwa;
        test_annee = year(semaine);
        output;
      end;
    run;
    Bon Courage Ward

  4. #4
    Membre régulier
    Inscrit en
    Juillet 2009
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 155
    Points : 77
    Points
    77
    Par défaut
    Simple, clair, précis, bien expliqué, bref, efficace !
    Ce n'était pas intuitif pour moi d'appliquer le format weekv directement dans un put.

    Merci à tous les deux !

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

Discussions similaires

  1. créer une table de folder
    Par bibifinal dans le forum MFC
    Réponses: 2
    Dernier message: 25/02/2005, 14h24
  2. Créer une table en VBA ?
    Par nicburger dans le forum Access
    Réponses: 11
    Dernier message: 16/02/2005, 15h15
  3. Réponses: 17
    Dernier message: 03/12/2004, 14h33
  4. Comment créer une Table dans 1 Bdd ACCESS avec Builder??
    Par makandja dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/03/2004, 20h21

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