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 :

Sélectionner une ligne par un ID avec la plus grande date


Sujet :

SAS Base

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 113
    Points : 107
    Points
    107
    Par défaut Sélectionner une ligne par un ID avec la plus grande date
    Bonjour,

    J'ai dans une table sur un serveur de BDD, nvariable + une variable date + une variable ID
    J'aimerai récupérer une seule ligne par ID qui serait la ligne avec la plus grande date (si deux dates sont identiques j'en veux qu'une sans préférence particulière).
    Est-il possible de récupérer en une seule étape, voir deux, (proc sql ou data) ce résultat attendu.
    En data je le fais en 3 étapes.
    1- récupération dans ma table en sas
    2- proc sort
    3- garder la dernière ligne avec un last.ID

    exemple
    entrée
    ID1 var1...varx1 01/01/2009
    ID1 var2...varx2 01/02/2009
    résultat
    ID1 var2...varx2 01/02/2009

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 747
    Points : 978
    Points
    978
    Par défaut
    Salut,

    Un exemple avec une seule PROC SUMMARY :

    Le statement qui garde tes infos est "ID"

    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
    proc sql;
       create table WORK.MONTRE
       (ID num
       ,DATE date
       ,OTHER1 char(1)
       ,OTHER2 char(1)
       )
       ;
       insert into WORK.MONTRE 
       values(1, %sysfunc(mdy(1, 1, 2010)), 'A', '0')
       values(1, %sysfunc(mdy(3, 1, 2010)), 'B', '1')
       values(1, %sysfunc(mdy(2, 1, 2010)), 'C', '2')
       values(2, %sysfunc(mdy(3, 1, 2010)), 'D', '2')
       ;
    quit;
     
    proc summary data=WORK.MONTRE nway;
       class ID;
       id OTHER:;
       var DATE;
       output out=onlyMAX max=;
    run;
    Tcho,

    Xav

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 113
    Points : 107
    Points
    107
    Par défaut
    Je n'avais pas pensé à la proc summary.
    Juste une question, other: c'est une option reconnue en v9 ? En v8 ce n'est pas reconnue. Ou c'est toi qui a mi other juste pour préciser de mettre toutes les autres variables ?
    En tout cas ça marche bien en une seule étape.
    Merci

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 153
    Points : 76
    Points
    76
    Par défaut
    Avec SQL, je pense aussi qu'on peux répondre à ce problèmatique..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    proc sql;
    select * from  WORK.MONTRE  
    having Date=max(date);
    quit;
    Bon courrage

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 113
    Points : 107
    Points
    107
    Par défaut
    Mais dans ce cas si j'ai sur le même id, deux lignes qui ont la date max, alors je récupérerai deux lignes et non une. Et le distinct ne pourra rien pour moi car les autres variables peuvent avoir des valeurs différentes.
    mais merci pour ta solution

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 747
    Points : 978
    Points
    978
    Par défaut
    Citation Envoyé par lhonolulu Voir le message
    Je n'avais pas pensé à la proc summary.
    Juste une question, other: c'est une option reconnue en v9 ? En v8 ce n'est pas reconnue. Ou c'est toi qui a mi other juste pour préciser de mettre toutes les autres variables ?
    En tout cas ça marche bien en une seule étape.
    Merci
    ce code fonctionne en SAS8 comme en SAS9 .

    le OTHER: permet de demander : "toute variable commencant par <OTHER>" .

    C'est un peut un wildcard *

    Xav

Discussions similaires

  1. [2008R2] Recuperer la valeur avec la plus grande date
    Par guigui69 dans le forum Développement
    Réponses: 1
    Dernier message: 01/08/2013, 12h47
  2. [Toutes versions] Plusieurs lignes avec identifiant en une ligne par identifiant
    Par spleen92 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 17/05/2011, 07h41
  3. [PHP 4] Sélectionner les lignes d'un formulaire avec une case à cocher
    Par shenmicke dans le forum Langage
    Réponses: 7
    Dernier message: 05/08/2009, 14h56
  4. Réponses: 0
    Dernier message: 07/02/2009, 10h56
  5. Réponses: 9
    Dernier message: 22/05/2006, 12h21

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