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 :

Créer colonne Numero de Memoire par Num de moire avec plusieurs conditions [DATA]


Sujet :

SAS Base

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 14
    Points : 20
    Points
    20
    Par défaut Créer colonne Numero de Memoire par Num de moire avec plusieurs conditions
    Bonjour,

    Avec un exemple c'est toujours plus facile à expliquer:

    J'ai deux tables comme celles ci

    Table1 j'ai un ou plusieurs etudiants qui font un meme memoire:
    NumEtudiant NumMemoire DatePassage
    32548819 125948 31/12/2012
    32487912 125948 31/12/2012
    32487591 125948 31/12/2012
    31849715 158794 15/12/2010
    34879154 158794 15/12/2010


    Et j'ai une autre table (ou je peux avoir une ou plusieurs lignes par etudiant):
    NumEtudiant DateReussitePrecedentes
    32548819 10/10/2013
    32548819 10/09/2010
    32487912 10/08/2009
    31849715 10/09/2009


    Un memoire est realisé par un deux ou plusieurs etudiants
    J'amerai savoir NumMemoire par NumMemoire quel est la dernière DateReussitePrecedentes de la deuxième table qui precede la DatePassage
    de la table 1.

    Exemple pour le NumMemoire 125948 (il y a deux etudiants qui font ce memoire: l'etudiant 32548819 et l'etudiant 32487912) Il faut regarder toutes les DateReussitePrecedentes des deux etudiants qui font ce memoire:
    10/10/2013
    10/09/2010
    10/08/2009

    DatePassage c'est 31/12/2012 pour ce memoire 125948, la dernière DateReussitePrecedentes c'est 10/10/2013 mais comme 10/10/2013 c'est après le 31/12/2012, je ne prends pas cette date
    je continu 10/09/2010 c'est bien avant DatePassage je mets donc cette date dans la colonne que je veux creer DernièreDateReussite



    je veux creer unetable avec une ligne par NumMemoire cette table:
    NumMemoire DatePassage DernièreDateReussite
    125948 31/12/2012 10/09/2010
    158794 15/12/2010 10/09/2009



    J'espère que mon exemple est clair.


    Merci

  2. #2
    Membre régulier
    Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Septembre 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Septembre 2013
    Messages : 27
    Points : 76
    Points
    76
    Par défaut
    Algo du code SAS :
    - Jointure entre les deux tables par NumEtudiant
    - Tu supprimes les lignes où DateReussite > DatePassa ( lgine 29)
    - Tri par NumMémoire, DatePassage & DateReussite (ligne 30)
    - Ne garder que la premier ligne par NumMémoire ( lgine 32)
    Voici le code :
    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
    data t1;
    	format NumEtudiant 8. NumMemoire  6. DatePassage ddmmyy10.;
    	informat DatePassage ddmmyy10.;
    	input NumEtudiant NumMemoire DatePassage;
    	cards;
    32548819 125948 31/12/2012 
    32487912 125948 31/12/2012
    32487591 125948 31/12/2012
    31849715 158794 15/12/2010
    34879154 158794 15/12/2010
    ;proc sort;by NumEtudiant;
    run;
     
    data t2;
    	format NumEtudiant 8.  DateReussitePrecedentes ddmmyy10.;
    	informat DateReussitePrecedentes ddmmyy10.;
    	input NumEtudiant DateReussitePrecedentes;
    	cards;
    32548819 10/10/2013
    32548819 10/09/2010
    32487912 10/08/2009
    31849715 10/09/2009
    ;proc sort;by NumEtudiant;
    run;
     
    data t3(drop=NumEtudiant);
    	merge t1 t2;
    	by NumEtudiant;
    	if DateReussitePrecedentes>DatePassage then delete;
    	proc sort;by numMemoire descending DatePassage descending DateReussitePrecedentes;
    run;
     
    proc sort data=t3 nodupkeys;by NumMemoire ;run;

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 14
    Points : 20
    Points
    20
    Par défaut
    Merci pour ta réponse.

    J'ai oublié de dire que dans la table t1, on peut avoir plusieurs memoires pour un même étudiant.

    Donc le merge de t1 et t2 ne peut pas marcher.

    Merci

  4. #4
    Membre régulier
    Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Septembre 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Septembre 2013
    Messages : 27
    Points : 76
    Points
    76
    Par défaut
    Si par exemple je rajoutes dans la table t1 la ligne (ajout du mémoire 125955 ):
    32487912 125955 15/12/2013

    j'obtiens une ligne dans la table en sortie :
    125955 15/12/2013 10/08/2009

    C'est le résultat attendu ?
    Si non, peux-tu me donner le ligne à rajouter dans les tables (t1 & t2) qui donne un résultat non souhaité.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 14
    Points : 20
    Points
    20
    Par défaut
    tu as raison j'ai verifié sur ma data ca marche


    Merci

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 14
    Points : 20
    Points
    20
    Par défaut
    Bonjour,

    dsl de rouvrir ce forum mais comme c'est difficile de tout réexpliquer.

    Je souhaite juste NumMemoire par NumMemoire calculer une nouvelle colonne nombresurles36derniersmois:
    le nombre de DateReussitePrecedentes dans la table t2 sur les 36 mois qui precede la DatePassage du memoire de la table t1 (si deux étudiants passe le meme memoire alors c'est la somme de DateReussitePrecedentes dans la table t2 sur les 36 derniers mois du premier etudiant et DateReussitePrecedentes dans la table t2 sur les 36 derniers mois du deuxième etudiant).

    ex pour le memoir numero 125948 (de la table1) nombresurles36derniersmois=2
    (Il faut compter 10/09/2010 et 10/08/2009 de la table t2).

    Merci

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 25/09/2014, 17h14
  2. Réponses: 1
    Dernier message: 24/03/2014, 08h33
  3. Réponses: 4
    Dernier message: 31/10/2007, 20h27
  4. Consommation memoire par classe
    Par spartikis dans le forum C++
    Réponses: 5
    Dernier message: 25/07/2005, 16h42
  5. Réponses: 1
    Dernier message: 04/05/2005, 11h43

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