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 :

Recherche dans une table SAS


Sujet :

SAS Base

  1. #1
    Membre du Club
    Homme Profil pro
    statisticien
    Inscrit en
    juin 2017
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : statisticien
    Secteur : Santé

    Informations forums :
    Inscription : juin 2017
    Messages : 50
    Points : 43
    Points
    43
    Par défaut Recherche dans une table SAS
    Bonjour à tous.

    Je suis confronté à un problème auquel je ne trouve pas de solution.

    J'ai une table A dans laquelle j'ai une colonne avec des numéros de patients et une seconde contenant des dates de prélèvements.
    Une table B contenant des numéros patients (identique à ceux dans la table A) et les dates d'écriture des comptes rendus.

    Je souhaiterais vérifier qu'il ne me manque pas des comptes rendus pour certains patients.

    La complexité de la chose est que les comptes rendu ne sont pas forcément écrit le jour du prélèvement. Il faudrait donc vérifier pour chaque patient et chaque prélèvement (1 patient peut avoir plusieurs prélèvements) qu'il y ait un compte rendu d'écrit dans la semaine.

    Quelqu'un à une idée de comment procéder car moi je sèche en plein.

    Merci par avance.

  2. #2
    Membre expérimenté
    Inscrit en
    novembre 2009
    Messages
    701
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 701
    Points : 1 307
    Points
    1 307
    Par défaut Format WEEKW.
    Bonjour,

    Je vous conseille de générer des dates au format "anneeWsemaine". Ce format est proposé par la norme ISO 8601 (paragraphe numéro de semaine / notation normalisée).

    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
    data test;
      input date1 :ddmmyy10.;
      format date1 ddmmyy10.;
      cards;
    01/03/2020
    02/03/2020
    03/03/2020
    04/03/2020
    05/03/2020
    06/03/2020
    07/03/2020
    08/03/2020
    09/03/2020
    ;
    run;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    data test;
      set test;
      date2=date1;
      format date2 WEEKW9.;
      datew=substr(put(date1,WEEKW9.),1,7);
    run;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
         date1    date2         datew
    01/03/2020    2020W0807    2020W08
    02/03/2020    2020W0901    2020W09
    03/03/2020    2020W0902    2020W09
    04/03/2020    2020W0903    2020W09
    05/03/2020    2020W0904    2020W09
    06/03/2020    2020W0905    2020W09
    07/03/2020    2020W0906    2020W09
    08/03/2020    2020W0907    2020W09
    09/03/2020    2020W1001    2020W10
    ou même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    data test;
      set test;
      date2=put(date1,WEEKW6.);
    run;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
         date1    date2
    01/03/2020    20W08
    02/03/2020    20W09
    03/03/2020    20W09
    04/03/2020    20W09
    05/03/2020    20W09
    06/03/2020    20W09
    07/03/2020    20W09
    08/03/2020    20W09
    09/03/2020    20W10
    Cordialement

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2018
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mars 2018
    Messages : 20
    Points : 26
    Points
    26
    Par défaut
    voici un exemple similaire , si le prélèvement est enregistrer entre lundi et vendredi on met exist sinon exist pas

    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
    35
    36
    data tab_A;
    input ID date_pr ddmmyy10.;
    format date_pr ddmmyy10.;
    cards;
    1 10/02/2020
    1 12/02/2020
    1 31/12/2020
    2 20/01/2020
    2 20/02/2020
    2 22/02/2020
    3 01/02/2020
    ;
    run;
     
    data tab_b;
    input ID date_cr ddmmyy10.;
    format date_cr ddmmyy10.;
    cards;
    1 10/02/2020
    2 21/02/2020
    3 04/02/2020
    1 01/01/2021
    ;
    run;
     
     
    proc sql;
    create table tab_verif as 
     
    select a.*,
    b.date_cr,
    case when date_cr is not null then 'exist' else 'exist pas ' end as verif 
    from tab_A a 
    left join tab_b b on a.ID eq b.ID and (a.date_pr between intnx('week',b.date_cr,0)+1 and intnx('week',b.date_cr,1)-2)
    ;
    run;

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    janvier 2013
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : janvier 2013
    Messages : 467
    Points : 1 511
    Points
    1 511
    Par défaut
    Bonjour,
    Une solution à l'aide d'une table de hachage :

    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
    35
    36
    37
    38
    39
    40
     
    data tab_A ;
    input ID date_pr ddmmyy10. ;
    format date_pr ddmmyy10.;
    cards;
    1 09/02/2020
    1 10/02/2020
    1 12/02/2020
    1 26/12/2020
    1 31/12/2020
    2 20/01/2020
    2 20/02/2020
    2 22/02/2020
    2 04/02/2020
    3 01/02/2020
    ;   
     
    data tab_B ;
    input ID date_cr ddmmyy10.;
    format date_cr ddmmyy10.;
    cards;
    1 10/02/2020
    2 21/02/2020
    3 03/02/2020
    1 28/02/2020
    ;	 
     
    data Verif ;
     if _n_ = 1 then do;
     if 0 then set tab_b ;
     declare hash hoss(dataset:'tab_B') ;
     hoss.definekey ('ID');
     hoss.definedata('date_cr');	
     hoss.definedone();
    end ;  
     
    set tab_A ;
    if hoss.find()=0 then 
    Verif=ifc(intnx('week',date_pr,0) <= date_pr <= date_cr,'Exist','Ne_Exist_Pas' ) ; 
    run;
    Note :
    Il est également possible de résoudre cette problématique à l'aide de l'instruction MERGE.
    Un trie des deux tables est indispensable.

    Cordialement
    Ward

Discussions similaires

  1. Réponses: 3
    Dernier message: 30/09/2013, 16h53
  2. Recherche dans une table via un formulaire
    Par Z[ee]k dans le forum Access
    Réponses: 3
    Dernier message: 05/06/2006, 11h14
  3. [VB6] Erreur durant la recherche dans une table
    Par quaife dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/04/2006, 17h21
  4. Recherche dans une table
    Par Fredo67 dans le forum Access
    Réponses: 2
    Dernier message: 28/02/2006, 17h21
  5. recherche dans une table Access en ASP
    Par D-D dans le forum ASP
    Réponses: 3
    Dernier message: 09/06/2004, 10h12

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