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 :

Prendre la dernière valeur d'une table SAS


Sujet :

SAS Base

  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 Prendre la dernière valeur d'une table SAS
    Bonsoir à tous.

    Je me permet de m'adresser à vous car j'ai un petit soucis lors de la création d'un programme SAS. En effet, j'ai plusieurs tables sur lesquelles je dois travailler et desquelles je dois faire resortir quotidiennement les variables les plus récentes.

    Je m'explique. J'ai une table qui liste le nombre de visiteurs à un point d'accueil par jour et j'ai besoin de faire resortir la dernière ligne de cette table.
    En gros, j'ai ça:


    Obs dtjour nbvisit typeenregist
    1 31/12/2008 205 1
    2 01/01/2009 302 1
    3 02/01/2009 638 1
    4 03/01/2009 898 1

    Et je veux, à chaque fois que je vais exécuter mon programme, la dernière ligne ayant la date la plus récente.
    J'ai essayer la fonction "call symput" mais je ne m'en sors pas.

    Si parmis vous quelqu'un pouvait m'aider, je lui en serais très reconnaissant.

    Merci d'avance

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 249
    Points : 290
    Points
    290
    Par défaut
    Bonjour,

    Est-ce-que cela répond à ton problème ?

    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
    data test ; /* Création jeu essai */
       input vdate:ddmmyy10. visites vtypenr ;
       format vdate ddmmyy10. ;
       cards ;
    31/12/2008 205 1
    01/01/2009 302 1
    02/01/2009 638 1
    03/01/2009 898 1
    ;
    run ;
    proc sort data=work.test out=work.testsorted ; /* Tri jeu essai */
       by descending vdate ;
    run ;
    data _null_ ;
       set work.testsorted ;
       call symput ('mvdate', compress(vdate)) ; /* Création des macrovariables */
       call symput ('mvisites', compress(visites)) ;
       call symput ('mvtypenr', compress(vtypenr)) ;
       if _N_ = 1 then stop ; /* Ne lire que la première observation */
    run ;
    /* Affichage du résultat dans la log */
    %put mvdate = &mvdate ;
    %put mvisites = &mvisites ;
    %put mvtypenr = &mvtypenr ;
    Bon courage !

  3. #3
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Points : 6 064
    Points
    6 064
    Par défaut
    Si tu veux tu peux aussi lire la table sans trier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    data _null_;
    set test end=fin;
    if fin then call symputx('last',vtypenr);
    run;
    %put last=&last;
    ou bien tu le laisses chercher la plus grande date puisque c'est une Date SAS...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    proc sql noprint;
    select visites into : last2 
    from test
    having visites = max(visites);
    quit;
    %put last2=&last2;
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  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 et merci pour vos réponses.

    J'ai finalement utilisé la méthode où on prend la date la plus grande.

    Mais j'ai pu, grâce aux autres exemples, comprendre un peu mieux comment
    fonctionne la commande symput.

    Merci beaucoup pour vos réponses rapides.

    Bonne journée.

  5. #5
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Points : 6 064
    Points
    6 064
    Par défaut
    J'ai finalement utilisé la méthode où on prend la date la plus grande.
    euh... c'est à dire ?

    Nos deux propositions sont équivalentes mais je ne trie pas la table, c'est tout.
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  6. #6
    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
    J'ai donc utilisé la seconde méthode que vous m'avez donné, c'est à dire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    proc sql noprint;
    SELECT visites INTO : last2 
    FROM test
    HAVING visites = max(visites);
    quit;
    %put last2=&last2;
    Cordialement

Discussions similaires

  1. Réponses: 15
    Dernier message: 21/07/2017, 14h57
  2. Réponses: 3
    Dernier message: 30/09/2013, 16h53
  3. Réponses: 4
    Dernier message: 22/03/2010, 21h24
  4. Réponses: 5
    Dernier message: 22/05/2008, 16h24
  5. [MySQL] Prendre la valeur d'une table et l'associer à la valeur d'une autre
    Par gandolfi dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 02/02/2008, 08h04

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