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

Discussion: Calcul de date

  1. #1
    Membre à l'essai
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    juillet 2015
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2015
    Messages : 53
    Points : 20
    Points
    20

    Par défaut Calcul de date

    bonjour j'aimerais avoir votre aide pour ajuster des dates:

    J'ai une base SAS avec deux variables date au format date9. : date_debut et date_fin. Dans un premier temps, j'aimerais créer une variable année qui prend l'année de date_debut, pour cela j'ai utilisé la fonction year.

    A présent j'aimerais créer un programme dans le cas ou pour un contrat donnée j'ai deux dates sur deux années différentes de me la découper en deux: je m'explique via un exemple:

    contrat Annee date_deb date_fin
    A1 2015 02FEV2015 15DEC2015
    A2 2016 05Juin2016 25NOV2017


    j'aimerais transformer ma base ainsi:

    contrat Annee date_deb date_fin
    A1 2015 02FEV2015 15DEC2015
    A2 2016 05Juin2016 31DEC2016
    A2 2017 01Janv2017 25NOV2017

    Donc pour le contrat A2 j'ai bien décomposé mon contrat sur deux périodes. Par contre pour les contrats dont la date de début et date de fin sont sur le mm année ( contrat A1) , il ne fait rien.

    Un grand merci

    Cordialement

  2. #2
    Membre éprouvé
    Avatar de m.brahim
    Homme Profil pro
    SAS / BIG DATA
    Inscrit en
    juillet 2011
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SAS / BIG DATA
    Secteur : Conseil

    Informations forums :
    Inscription : juillet 2011
    Messages : 402
    Points : 1 019
    Points
    1 019
    Billets dans le blog
    13

    Par défaut

    Bonjour,

    Je te propose cette solution:
    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
    data test1(drop =datef an  date_fin rename=(date_fin1=date_fin));
    set test;
    format date_fin1 date9.;
    datef=intck('year',date_deb,date_fin);
    an=year(date_deb);
    if datef=0 then do
    date_fin1=date_fin;
    output;
    end;
    if datef=1 then do;
    date_fin1=mdy(12,31,an);
    output;
    date_fin1=date_fin;
    output;
    end;
    run;
    Cordialement
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

  3. #3
    Membre à l'essai
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    juillet 2015
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2015
    Messages : 53
    Points : 20
    Points
    20

    Par défaut

    Bonjour Brahim,

    Merci de m'avoir répondu, par contre dans ton programme je ne vois pas 01/01/YYYY.

    passage de:

    A1 2015 02FEV2015 15DEC2015
    A2 2016 05Juin2016 25NOV2017

    à

    A1 2015 02FEV2015 15DEC2015
    A2 2016 05Juin2016 31DEC2016
    A2 2017 01Janv2017 25NOV2017


    Donc comme tu peux le voir, je duplique le contrat A2; avec une première période qui va du 05juin2016 au 31dec2016 puis une deuxième qui va du 01JANV2017 au 25NOV2017.

    En gros quand je suis à cheval sur deux année, la deuxième ligne doit obligatoirement commencer par 01janvANNEE+1.

    Un grand merci

  4. #4
    Membre éprouvé
    Avatar de m.brahim
    Homme Profil pro
    SAS / BIG DATA
    Inscrit en
    juillet 2011
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SAS / BIG DATA
    Secteur : Conseil

    Informations forums :
    Inscription : juillet 2011
    Messages : 402
    Points : 1 019
    Points
    1 019
    Billets dans le blog
    13

    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
    14
    15
    16
    17
    18
    19
    data test1(drop =datef an an1  date_fin rename=(date_fin1=date_fin));
    set test;
    format date_fin1 date9.;
    datef=intck('year',date_deb,date_fin);
    an=year(date_deb);
    an1=year(date_fin);
    if datef=0 then do
    date_fin1=date_fin;
    output;
    end;
    if datef=1 then do;
    date_fin1=mdy(12,31,an);
    output;
    date_fin1=date_fin;
    date_fin=mdy(01,01,an1);
    date_deb=date_fin;
    output;
    end;
    run;
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

  5. #5
    Membre à l'essai
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    juillet 2015
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2015
    Messages : 53
    Points : 20
    Points
    20

    Par défaut

    Bonjour Brahim;

    Le code semble marcher, par contre j'ai une question:

    quand tu mets: date_fin=mdy(01,01,an1), c'est plutôt date_deb non?
    Car je n'arrive pas a voir côte à côte les deux variable date_deb, date_fin...
    Il ne faut pas aussi modifier dans le rename ?

  6. #6
    Membre à l'essai
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    juillet 2015
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2015
    Messages : 53
    Points : 20
    Points
    20

    Par défaut

    car moi au final j'aimerais une table finale ainsi:

    date_deb date_fin date_deb1 date_fin_1
    A1 2015 02FEV2015 15DEC2015 02FEV2015 15DEC2015
    A2 2016 05Juin2016 25NOV2017 05Juin2016 31DEC2016
    A2 2017 05Juin2016 25NOV2017 01Janv2017 25NOV201

    J'aimerais garder mes anciennes dates non "découpées" et les nouvelles donc découpées.

    un grand merci

  7. #7
    Membre éprouvé
    Avatar de m.brahim
    Homme Profil pro
    SAS / BIG DATA
    Inscrit en
    juillet 2011
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SAS / BIG DATA
    Secteur : Conseil

    Informations forums :
    Inscription : juillet 2011
    Messages : 402
    Points : 1 019
    Points
    1 019
    Billets dans le blog
    13

    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
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    data test;
    input contrat $ var2 (date_deb date_fin)(:date9.);
    format date_deb date_fin date9.;
    cards;
    A1 2015 02FEB2015 15DEC2015
    A2 2016 05Jun2016 25NOV2017
    ;run;
     
    data test1(keep=contrat annee date_deb date_fin date_deb1  date_fin1);
    retain contrat annee date_deb date_fin date_deb1  date_fin1;
    set test;
    retain date_deb date_fin;
    format date_deb date_deb1 date_fin date_fin1  date9.;
    datef=intck('year',date_deb,date_fin);
    an=year(date_deb);
    an1=year(date_fin);
    if datef=0 then do
    date_fin1=date_fin;
    date_deb1=date_deb;
    annee=year(date_deb1);
    output;
    end;
    if datef=1 then do;
    date_fin1=mdy(12,31,an);
    date_deb1=date_deb;
    annee=year(date_deb1);
    output;
     
    date_deb1=mdy(01,01,an1);
    date_fin1=date_fin;
    annee=year(date_deb1);
    output;
    end;
    run;
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

  8. #8
    Membre à l'essai
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    juillet 2015
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2015
    Messages : 53
    Points : 20
    Points
    20

    Par défaut

    Parfait ça marche nickel...un grand merci Brahim

  9. #9
    Membre à l'essai
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    juillet 2015
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2015
    Messages : 53
    Points : 20
    Points
    20

    Par défaut

    Petite question, si j’ai une variable sous format date 9. , que j’appelle date, si je veux prendre l'ensemble Des dates >= 01JAN2015, je fais bien: Where date >= mdy(01,01,2015) dans un proc dsl par exemple?

    Merci

Discussions similaires

  1. [Calendar]Problème de calcul de date
    Par valerie90 dans le forum java.util
    Réponses: 6
    Dernier message: 08/12/2004, 13h13
  2. COUNT + Calcul de DATE
    Par cassi2 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/10/2004, 17h35
  3. Resutlat de calcul sur date formaté
    Par neness dans le forum SQL
    Réponses: 6
    Dernier message: 16/06/2004, 16h34
  4. SCRIPT CALCULANT LA DATE
    Par Redouane dans le forum ASP
    Réponses: 3
    Dernier message: 17/03/2004, 10h10
  5. Calcul sur date
    Par Thomad dans le forum MS SQL-Server
    Réponses: 2
    Dernier message: 17/09/2003, 09h55

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