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 :

Calcul de date


Sujet :

SAS Base

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2015
    Messages
    62
    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 : 62
    Points : 27
    Points
    27
    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
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2011
    Messages : 461
    Points : 1 119
    Points
    1 119
    Billets dans le blog
    14
    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
    Nouveau membre du Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2015
    Messages
    62
    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 : 62
    Points : 27
    Points
    27
    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
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2011
    Messages : 461
    Points : 1 119
    Points
    1 119
    Billets dans le blog
    14
    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
    Nouveau membre du Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2015
    Messages
    62
    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 : 62
    Points : 27
    Points
    27
    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
    Nouveau membre du Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2015
    Messages
    62
    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 : 62
    Points : 27
    Points
    27
    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
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2011
    Messages : 461
    Points : 1 119
    Points
    1 119
    Billets dans le blog
    14
    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
    Nouveau membre du Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2015
    Messages
    62
    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 : 62
    Points : 27
    Points
    27
    Par défaut
    Parfait ça marche nickel...un grand merci Brahim

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2015
    Messages
    62
    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 : 62
    Points : 27
    Points
    27
    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 Collection et Stream
    Réponses: 6
    Dernier message: 08/12/2004, 12h13
  2. COUNT + Calcul de DATE
    Par cassi2 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/10/2004, 16h35
  3. Resutlat de calcul sur date formaté
    Par neness dans le forum SQL
    Réponses: 6
    Dernier message: 16/06/2004, 15h34
  4. SCRIPT CALCULANT LA DATE
    Par Redouane dans le forum ASP
    Réponses: 3
    Dernier message: 17/03/2004, 09h10
  5. Calcul sur date
    Par Thomad dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/09/2003, 08h55

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