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 :

Date SAS


Sujet :

SAS Base

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 32
    Points : 28
    Points
    28
    Par défaut Date SAS
    Bonjour à tous,

    J'ai visité la FAQ avant de poser ma question, car je m'en sors pas du tout, étant débutante en SAS.:?

    J'ai dans ma base données qui couvre 3 années (2005, 2006, 2007), plusieurs variables, dont une variable 'dateHA' de format numérique (aaaamm) ex: 200501, 200703, ect. ; et une variable 'dateREMBOURS' de format numérique (aaaamm).

    Je veux selectionner certaines données, telle que,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if dateHA=200501 and dateREMBOURS > = 200501 and 
    dateREMBOURS < = 200704 then output  ;
     
    if dateHA=200502 and dateREMBOURS > = 200501 and 
    dateREMBOURS < = 200705 then output  ;
     
    if dateHA=200503 and dateREMBOURS > = 200501 and 
    dateREMBOURS < = 200706 then output  ;
    ect...


    Ne voulant pas avoir à faire des quantités de lignes


    J'ai voulu mettre en place un programme qui permette de sélectionner, pour dateHA=aaaamm, les 27 mois de dateREMBOURS allant de aaaamm à + 27 mois.

    J'ai tenté de faire un programme de ce type, mais ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if dateHA=aaaamm and dateREMBOURS > = aaaamm and 
    dateREMBOURS < = aaaamm+27 then output  ;

    Merci par avance pour votre aide !!!!

  2. #2
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    je n'ai jamais travaillé sur les dates avec ce format.

    Essaye la syntaxe suivante

    '200501'd : SAS reconnait dans la chaine de caractère une date.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if dateHA='200501'd and dateREMBOURS > = '200501'd and 
    dateREMBOURS < = '200704'd then output ;
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

  3. #3
    Membre actif

    Profil pro
    Inscrit en
    Avril 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 233
    Points : 254
    Points
    254
    Par défaut
    Citation Envoyé par didinet Voir le message
    J'ai tenté de faire un programme de ce type, mais ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if dateHA=aaaamm and dateREMBOURS > = aaaamm and 
    dateREMBOURS < = aaaamm+27 then output  ;
    Merci par avance pour votre aide !!!!
    Qu'est-ce qui ne fonctionne pas au juste ? Tu l'a fait en tant qu'une macro ? Tu peux donner le code exacte et les messages du log ?

  4. #4
    Membre actif

    Profil pro
    Inscrit en
    Avril 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 233
    Points : 254
    Points
    254
    Par défaut
    Citation Envoyé par bahraoui Voir le message
    je n'ai jamais travaillé sur les dates avec ce format.
    Si tout est numérique, a priori ça devrait marcher. +27 mois se traduit juste par +27 en nombres. Et ce sera plus simple que de convertir tout en date.

  5. #5
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    data t;
    format a date9.;
    a='12DEC2007'd;output;
    a='31DEC2007'd;output;
    run;
     
    /*'Nombre de jour 17512 entre 01JAN1960 et 12DEC2007'*/
    data t1; set t;
    t1=0 ;t2=0;
    if a > '13DEC2007'd then t1=1;
    if a > 17512 then t2=1;
    run;
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

  6. #6
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Citation Envoyé par green_fr Voir le message
    Si tout est numérique, a priori ça devrait marcher. +27 mois se traduit juste par +27 en nombres. Et ce sera plus simple que de convertir tout en date.
    La comparaison ne marchera pas
    if a > aaaamm+27
    SAS interpretera aaaamm+27 comme le nombre de jour entre le 1JAN1960 et ajourd'hui.
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

  7. #7
    Membre actif

    Profil pro
    Inscrit en
    Avril 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 233
    Points : 254
    Points
    254
    Par défaut
    Citation Envoyé par bahraoui Voir le message
    La comparaison ne marchera pas
    if a > aaaamm+27
    SAS interpretera aaaamm+27 comme le nombre de jour entre le 1JAN1960 et ajourd'hui.
    C'est vrai si la variable aaaamm et une variable "date" au sens de SAS, i.e. une variable numérique qui contient le nombre de jours depuis 01/01/1960. Tandis que dans l'exemple de didinet c'est une variable numérique simple, i.e. 200501 égal "deux cent mille cinq cent un". Si on ajoute 1 ça fait 200502, ce qui peut être traité comme "plus un mois".

    Par contre avec +27 j'ai dit une bêtise :-) 27 mois pour ces variables c'est la différence de 203 (2 ans et 3 mois) pour les nombres qui finissent par 01-09, et la différence de 291 (3 ans moins 9 mois) pour les nombres qui finissent par 10-12. On remplace la conversion des dates avec le formatage par les opérations arithmétiques (peu lisibles, mais bon...)

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 32
    Points : 28
    Points
    28
    Par défaut problème date
    Citation Envoyé par bahraoui Voir le message
    La comparaison ne marchera pas
    if a > aaaamm+27
    SAS interpretera aaaamm+27 comme le nombre de jour entre le 1JAN1960 et ajourd'hui.
    Merci à tous

    En faite en selectionnant la variable 200501+27, je pensais obtenir 200703 mais en faite j'obtiens 200528.

    J'arrive difficilement à appliquer ce que vous me dites. Je me réexplique :

    Ci-joint ma base (réduite) ex.xls avec les 3 variables :
    dateHA dateREMB DEPENSES

    Je réussis à partir d'un programme à couvrir le champ qui m'interresse. C'est à dire pour chaque dateHA, correspond une dateREMB qui va de dateHA à +27 mois.

    Exemple pour dateHA = 200506, je dois retenir dans ma base que dateREMB compris entre 200506 et 200709. Et ainsi de suite

    Effectivement, je voulais faire ça en tant que macros, mais pour cela il me faut je pense transformer mes variables numériques dateHA et dateREMB en format date.

    Ci-dessous une partie du programme que j'avais déjà envoyé dans le dernier message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    data test ; 
    set base ; 
    if dateHA= 200501 and dat_rbt > = 200501 and dat_remb < = 200704 then output  ;
    if dateHA = 200502 and dat_rbt > = 200502 and dat_remb < = 200705 then output   ;
    if dateHA = 200503 and dat_rbt > = 200503 and dat_remb < = 200706  then output  ;
     
    "
    "
    if dat_soin = 200512 and dat_rbt > = 200512 and dat_rbt < = 200803   then output  ;
    if dat_soin = 200601 and dat_rbt > = 200601 and dat_rbt < = 200804  then output  ;
    "
    run;

  9. #9
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Est ce que c'est possible d'envoyer une partie de la table?
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

  10. #10
    Membre actif

    Profil pro
    Inscrit en
    Avril 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 233
    Points : 254
    Points
    254
    Par défaut
    Citation Envoyé par didinet Voir le message
    Merci à tous

    En faite en selectionnant la variable 200501+27, je pensais obtenir 200703 mais en faite j'obtiens 200528.
    Regarde mon message de hier 15h11. Le code pour ajouter 27 mois à tes variables doit être comme suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    data test;
    	a = 200511;
    	if (a - round(a / 100) * 100 in (10, 11, 12)) then
    		b = a + 291;
    	else
    		b = a + 203;
    run;
    En gros, "27 mois" = soit "2 ans + 3 mois", soit "3 ans - 9 mois". Tes chiffres ne sont pas simple décimales (par exemple, tu ne peux pas avoir 200528 comme une chiffre valable), mais les chiffres à positionnement complexe où les centaines signifient les années et les unités simples - mois, avec un passage au registre suivant après le 12 (directement au 01 et pas au 00).
    Ce qui explique la traduction de 27 par soit 203 (2 * 100 + 3) soit par 291 (3 * 100 - 9).

  11. #11
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    La fonction intnx te permet d'ajouter à une date des mois année ou jour d'une manière très facile
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

  12. #12
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 637
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 637
    Points : 6 805
    Points
    6 805
    Par défaut
    Pensez au tag quand un problème est réglé
    la culture c'est comme la confiture moins on en a plus on l'étale.

    Mes tutos

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

Discussions similaires

  1. Date SAS dans une requête
    Par CyberMen dans le forum Débutez
    Réponses: 4
    Dernier message: 18/08/2012, 20h02
  2. les dates SAS
    Par statasma dans le forum SAS Base
    Réponses: 7
    Dernier message: 23/11/2011, 14h01
  3. Mettre une date SAS au format SAS
    Par tibss dans le forum SAS Base
    Réponses: 2
    Dernier message: 03/11/2010, 10h39
  4. Manipulation Date SAS
    Par kfmystik dans le forum Débutez
    Réponses: 13
    Dernier message: 05/03/2010, 08h39
  5. [Macro] Ajouter un jour à une date sas
    Par Tyler Durden dans le forum Macro
    Réponses: 2
    Dernier message: 15/01/2009, 12h57

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