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 :

Retourner le nombre de mois qui se sont écoulé entre deux periodes


Sujet :

SAS Base

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 422
    Points : 99
    Points
    99
    Par défaut Retourner le nombre de mois qui se sont écoulé entre deux periodes
    bonjour je souhaite connaître le nombre de mois qui se sont écoulés entre deux périodes

    dans ma proc sql j'ai déclaré l'opération suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    month(date())-month(datepart(DT_DEB_VALIDITE)) as duree
    mais le hic c'est que ça me retourne des nombres négatifs

    Merci d'avance.

  2. #2
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Points : 3 403
    Points
    3 403
    Par défaut
    Hello,
    t'as une fonction SAS qui te pertmet de calculer l'interval :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    diff_mois=intck('MONTH',date_debut,date_fin);
    ou sinon tu rajoutes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INT(month(date())-month(datepart(DT_DEB_VALIDITE)) )AS duree
    pour ce qui est du HIC, non il n'y a pas de HIC. exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    month('01JAN'2012)-month(datepart('01DEC2012 00:00:00')) AS duree
    donnera :
    c'est des maths.

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 422
    Points : 99
    Points
    99
    Par défaut
    non mm pb lorsque je rajoute la le int

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    intck('MONTH',date_debut,date_fin);
    est ce qu'il existe une fonction équivalente pour la proc sql?

    je sais qu'en langage sql il existe la fonction datediff mais je ne sais pas si ça marche dans une proc sql je vais tester

  4. #4
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Points : 3 403
    Points
    3 403
    Par défaut
    Sorry,
    c'est la fonction ABS qu'il faut utiliser.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ABS(month(date())-month(datepart(DT_DEB_VALIDITE)) )AS duree

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 422
    Points : 99
    Points
    99
    Par défaut
    fausse joie ça ne marche tjr pas j'ai tjr des nbs négatifs
    mais si on reprends dans ton exemple avec le month l'operation va se faire entre les indices des mois du coup ça va fausser le calcul et parconséquent la source d'erreur c'est le month et non pas le fait qu'il y ait un int ou un abs

    mais j'ai vu qu'il était possible d'utiliser l'instruction intck dans la proc sql je vais l'essayer

  6. #6
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Points : 3 403
    Points
    3 403
    Par défaut
    ah bon?

    de toute façon avec ta méthode, le résutlat sara automatiquement faux.
    avec INTCK et résultat est garantie.

  7. #7
    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
    Citation Envoyé par huître Voir le message
    non mm pb lorsque je rajoute la le int
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    intck('MONTH',date_debut,date_fin);
    est ce qu'il existe une fonction équivalente pour la proc sql?
    je sais qu'en langage sql il existe la fonction datediff mais je ne sais pas si ça marche dans une proc sql je vais tester
    La fonction DATEDIFF existe en SQL Oracle, pas forcément en SQL standard (je n'ai pas vérifié) ; en tout cas pas en SQL SAS, qui en revanche accepte toutes les fonctions SAS sauf celles qui tiennent à l'ordre de lecture des observations (LAG, DIF). Donc normalement, tu peux faire ton INTCK dans une proc SQL.
    Si tu as SAS 9.2 ou plus récent, tu peux ajouter un C en 4e argument pour calculer un nombre de mois en continu (sinon tu comptes le nombre de 1er du mois entre les 2 dates.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    intck('MONTH',date_debut,date_fin, "C");
    Si une ou plusieurs de tes dates sont stockées comme des datetimes, tu dois utiliser sur elles la fonction DATEPART.

  8. #8
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Points : 3 403
    Points
    3 403
    Par défaut
    Bon allé , un petit exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    data test;
    input debut  ddmmyy10. / fin  datetime20.;
    cards;
    01/01/2012
    01DEC2012 00:00:00
    01/05/2012
    01DEC2011 00:00:00
    ;
    run;
     
    proc sql;
    create table test1 as select *, abs(intck('MONTH', debut, datepart(fin))) as diff from test;
    quit;

  9. #9
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 422
    Points : 99
    Points
    99
    Par défaut
    ouffff quel soulagement ça marche merci infiniment

  10. #10
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Points : 3 403
    Points
    3 403
    Par défaut

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/06/2012, 10h52
  2. Réponses: 2
    Dernier message: 31/05/2012, 14h30
  3. Nombre de mois qui sépare deux dates
    Par Anandamine dans le forum Requêtes
    Réponses: 3
    Dernier message: 16/05/2012, 03h16
  4. Réponses: 8
    Dernier message: 28/01/2012, 21h41
  5. [RegEx] Recherche de données qui ne sont pas entre des balises
    Par Space Cowboy dans le forum Langage
    Réponses: 6
    Dernier message: 12/07/2007, 18h03

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