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

Macro Discussion :

Problème de filtre sur la date


Sujet :

Macro

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2008
    Messages : 29
    Par défaut Problème de filtre sur la date
    Bonjour,
    J'ai un souci avec proc format! je voulais faire un filtre sur la date du debut de pret en gardant par exemple la date entre 01/06/2006 et 01/06/2007. Pour ça j'ai fait deux macro variables, et un étape date avec where. le programme est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    %let Param_debut= 01/06/2006;
    %let Param_fin= 01/06/2007;
     
    Proc format;
    value Param_debut ddmmyy10.;
    run;
     
    data work.pret10; set work.pret;
    where date_debut_pret between &Param_debut and Param_fin; 
    run;
    si vous pouvez m'aider de corriger le code ou bien de me proposer une autre solution sachant que j'ai besoin de garder les macro variable pour le paramètrage!
    Merci beaucoup

  2. #2
    Membre émérite
    Avatar de steelspirit
    Homme Profil pro
    SAS discute
    Inscrit en
    Janvier 2008
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SAS discute
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 472
    Par défaut
    Bonjour,

    Attention à ne pas tout mélanger Proc FORMAT sert à créer son propre format et l'instruction FORMAT dans une étape data sert à appliquer un format sur une variable.

    Ici ce n'est pas un problème de format mais de type. Les macro-variables (&Param_debut, &Param_fin) sont toujours de type caractère. Hors les variables de date SAS (date_debut_pret) sont toujours de type numérique.

    Tu ne peux donc pas filtrer sur une variable numérique en rentrant des valeurs caractères !

    Pour filtrer sur une variable de date SAS (date_debut_pret), tu peux utiliser des constantes de dates ex: '31OCT2008'd. Cette constante de date dit à SAS : converti moi cette chaine de caractère ('31OCT2008') en une date SAS c'est à dire un numérique représentant le nombre de jours entre le 1er janvier 1960 et la date concernée. ATTENTION : une constante de date s'écrit toujours sous la forme 'DDMMMYYYY'd Ne pas oublier les quotes et le d en dehors des quotes.

    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    data work.pret10; set work.pret;
    where date_debut_pret >= '01JUN2006'd;
     run;
    D'un autre manière, tu peux filtrer une variable de date SAS (date_debut_pret), à l'aide de la fonction MDY(mois,jour,annee) qui reconstitue une date sas à partir de 3 variables numériques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    data work.pret10; set work.pret;
    where date_debut_pret >= MDY(6,1,2006);
     run;
    Ici on filtre sur date_debut_pret >= au 1er juin 2006.

    Voila je t'ai tout dit

    Steel

  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 : 49
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Par défaut
    Bonjour.
    La proc Format ne va pas être très utile dans ce cas-là : elle ne sert pas à affecter des formats, juste à en définir.
    De plus, les macro-variables n'ont pas de formats : ce sont juste des chaînes de caractères, et leur valeur est toujours celle qui s'affiche.
    Dans le code, il faudrait plutôt transformer date_debut_pret en chaîne de caractères, mais à ce moment-là il sera préférable d'avoir les dates sous la forme ANNEE-MOIS-JOUR pour que l'ordre alphabétique coïncide avec l'ordre chronologique. Je ne sais pas si tu accepterais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    %let Param_debut= 2006/06/01;
    %let Param_fin= 2007/06/01;
     
    data work.pret10; 
    set work.pret (
    where = (PUT(date_debut_pret,YYMMDD10.) between &Param_debut and &Param_fin )) ; 
    run;
    Une alternative, en gardant la forme actuelle de tes macro-variables, serait de les transformer en dates SAS le temps du Where. C'est juste un peu plus lourd à écrire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    %let Param_debut= 01/06/2006;
    %let Param_fin= 01/06/2007;
     
    data work.pret10; 
    set work.pret
    (where = (date_debut_pret between INPUT("&Param_debut", DDMMYY10.)
                                                and INPUT("&Param_fin", DDMMYY10.) ) ) ;
    run;
    Olivier

  4. #4
    Membre émérite
    Avatar de steelspirit
    Homme Profil pro
    SAS discute
    Inscrit en
    Janvier 2008
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SAS discute
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 472
    Par défaut
    Pour une fois je suis plus rapide qu'Olivier

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2008
    Messages : 29
    Par défaut
    Bonjour,
    Merci les amis pour la réponse sur le problème de date.

  6. #6
    Membre expérimenté


    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3 175
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 175
    Par défaut
    Merci de cliquer sur si le problème est solutionné
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

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

Discussions similaires

  1. Problème de filtre sur date => semestre
    Par clgri dans le forum Designer
    Réponses: 4
    Dernier message: 18/12/2009, 12h41
  2. Problème Filtre sur champ Date
    Par Batoche dans le forum kettle/PDI
    Réponses: 2
    Dernier message: 23/02/2009, 17h35
  3. [BOXI] Problème de filtre sur date
    Par Julien59 dans le forum Deski
    Réponses: 6
    Dernier message: 10/06/2008, 10h25
  4. Problème de filtre sur date avec ADOQuery
    Par lingli dans le forum Bases de données
    Réponses: 12
    Dernier message: 30/04/2006, 15h40
  5. Problème de reqûete sur la date, année et mois en cours
    Par Jean-Marc dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/02/2004, 16h36

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