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 :

Stockage automatique de la date du dernier enregistrement dans une macro variable


Sujet :

Macro

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Octobre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Octobre 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut Stockage automatique de la date du dernier enregistrement dans une macro variable
    Bonjour à tous,

    Je reviens vers vous afin d'obtenir de l'aide.

    En effet, je n'arrive pas à obtenir ce que je souhaite.
    J'ai une table qui me permet de voir tous les enregistrements liés à une activité spécifique de mon boulot.
    Afin de réaliser un reporting de l'activité du service, j'ai besoin d'automatisé l'envoi du document.
    Pour ce faire, je voudrais pouvoir sélectionner la date la plus récente présente dans ma table et la stocker dans une macro variable grace à la fonction
    Call SymputX pour pouvoir faire appel à cette macro variable ultérieurement.

    Le hic c'est que je n'arrive pas à écrire un code qui fonctionne correctement.
    En gros, je me demande comment créer la variable qui m'intéresse en sélectionnant directement la date la plus récente dans ma table.
    J'ai essayé avec SQL, j'ai écrit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    proc sql;
    create table test as
    select max(date1) into :date2 
    from table;
    quit;
     
    data _Null_;
    set test;
    call symputx ('dtjour',date2,put(dtjour,DDMMYY10.));
    run;
    SAS ne veut pas me créer la variable date2.

    J'ai aussi fait des recherche sur l'option last mais je ne trouve pas mon bonheur.

    Si vous aviez une solution pour moi, je vous en serais reconnaissant.

    Merci d'avance

  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
    proc sql;
    select max(date) format DDMMYY10. into :date2 
    from table;
    quit;
    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
    Développeur décisionnel
    Inscrit en
    Octobre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Octobre 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Effectivement, cela fonctionne.

    Merci beaucoup

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Octobre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Octobre 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Je reviens vers vous car la proposition de m.brahim ne fonctionne que partiellement dans mon cas.
    Je m'explique: la date la plus récente est bien stockée dans la macro variable date2 mais je n'arrive pas à
    utiliser cette dernière dans mon programme.
    le deboggeur de SAS me dit que le format de date est erroné.
    J'ai tenté d'utiliser plusieurs format de date différents et rien à faire...

    Voilà le code que je souhaite faire fonctionner:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    proc sort data=table (keep=date) nodupkey out=table2;
    by date;
    run;
     
    proc sql;
    select max(date) format DDMMYY10. into :date2 
    from table2;
    quit;
     
     
    data table3;
    set table;
    where document="LA02" and (etatsdp ne "ARR" and dtetatsd = "&date2."d) and (etatsdpa = "ARR" and dtetsdpa < "&date2."d);
    run;
    Merci d'avance pour vos éclaircissements.

  5. #5
    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 cet 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
    15
    16
    17
    18
    19
    20
    DATA entree ;
    format Date date9.;
    Date= '07oct2014'd;  output;
    Date= '08oct2014'd;  output;
    Date= '10oct2014'd;  output;
    Date= '10oct2014'd;  output;
    Date= '09MAR2008'd; output;
    Date= '15MAR2008'd; output;
    run;
     
    proc sql noprint;
    select max(date)  into :date2 
    from entree;
    quit;
     
    proc sql;
    create table sortie as select  date format DDMMYY10. from entree
    where date=&date2
    ;
    quit;
    Cordialement
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

  6. #6
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 624
    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 624
    Points : 3 402
    Points
    3 402
    Par défaut
    Hello,
    La date récupérée par la macro variable est déjà numérique donc plus besoin de conversion.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    where document="LA02" and (etatsdp ne "ARR" and dtetatsd = &date2.) and (etatsdpa = "ARR" and dtetsdpa < &date2.);
    Si tu souhaite récupérer la date au format caractère et utiliser la conversion avec "date(US)"D il faut que la date soit au format américain Ex: 01JAN2015, tu peux utiliser ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    proc sql noprint;
    select put(max(date),date9.) into :date2 
    from table;
    quit;
    data table3;
    set table;
    where document="LA02" and (etatsdp ne "ARR" and dtetatsd = "&date2."d) and (etatsdpa = "ARR" and dtetsdpa < "&date2."d);
    run;
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Octobre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur décisionnel

    Informations forums :
    Inscription : Octobre 2008
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Super, cette fois-ci, ça tourne parfaitement!

    En effet, mon erreur vient de la conversion de date...

    En tout cas, merci beaucoup m.brahim et s_a_m pour votre aide précieuse.

    Cordialement,

    Vince

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 08/06/2015, 10h13
  2. Réponses: 3
    Dernier message: 02/03/2012, 15h31
  3. recuperer le dernier enregistrement dans une table
    Par l_achraf dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 29/04/2009, 09h38
  4. Réponses: 1
    Dernier message: 14/09/2007, 18h04
  5. dernier enregistrements dans une base
    Par ac/dc dans le forum Administration
    Réponses: 2
    Dernier message: 13/02/2007, 11h45

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