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 :

Manipulation des lignes


Sujet :

SAS Base

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Manipulation des lignes
    Bonsoir,

    J'ai plusieurs lignes par individus et j'aimerais en avoir qu'une. Voici mon problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    obs     date_nais     sexe     X      Y      Z      T
    1      01/06/2013       M      a      .      .       .
    1                                      u     .       .
    1                                            o       .
    1                                                    i
    2      03/06/2013       F      b       .      .       .
    2                                      g     .       .
    3      04/06/2013       M      r       .      .       .
    3                                      a     .       .
    3                                            j      .
    et je voudrais obtenir ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    obs     date_nais     sexe     X      Y      Z      T
    1      01/06/2013       M      a      u     o       i
    2      03/06/2013       F       b      g             
    3      04/06/2013       M      r       a     j
    c'est un exemple fictif, je dois le faire sur une base de plus de 1 millions de lignes. Je cherche une procédure pas gourmande en temps d'exécution.
    J'espère que vous pourrez m'apporter une aide.
    Merci par avance!

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    la procédure proc transpose peut elle être une solution ?

  3. #3
    Membre habitué

    Homme Profil pro
    Consultant Support Client SAS
    Inscrit en
    Mai 2011
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Support Client SAS
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 94
    Points : 180
    Points
    180
    Par défaut
    Bonjour,

    Cela peut se faire aisément avec une étape data et un retain.
    Il faut se baser sur le fait que la variable OBS est une clé d'identification unique. A partir de là, le tour est joué.

    Je vous invite à regarder dans le livre de Sébastien Ringuédé, vous devriez trouver des exemples de codes similaires à ce que vous souhaitez.

    Cordialement,
    Jérémy NOEL

  4. #4
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Je crois que l'affichage ci-dessus est le résultat d'une proc print...
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2013
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour votre réponse, mais je ne vois pas comment je peux faire avec retain (sauf erreur de ma part il n'y a pas d'exemple de ce type dans le livre de M. Ringuede).
    voilà mon programme SAS
    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 obs date_nais :MMDDYY10. sexe$ X$ Y$ Z$ T$;
    cards;
    1 01/06/2013 M a . . .
    1 . . . u . .
    1 . . . . o .
    1 . . . . . i
    2 03/06/2013 F b . . .
    2 . . . g . .
    3 04/06/2013 M r . . .
    3 . . . u . .
    3 . . . . o .
    ;
    run;
    Pouvez-vous m'aider à faire cette étape data avec retain?

  6. #6
    Membre habitué
    Homme Profil pro
    Chargé d'études stats
    Inscrit en
    Mai 2013
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'études stats
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2013
    Messages : 49
    Points : 186
    Points
    186
    Par défaut
    Bonjour

    Un exemple avec retain :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    data test2;
    set test;
     
    retain date_nais_r sexe_r x_r y_r z_r t_r;
    if date_nais ne . then date_nais_r=date_nais;
    if sexe ne "" then sexe_r=sexe;
    if x ne "" then x_r=x;
    if y ne "" then y_r=y;
    if z ne "" then z_r=z;
    if t ne "" then t_r=t;
     
    run;
    Si tu as beaucoup de variables, tu peux utiliser des array.

    Il ne reste plus qu'à garder la dernière ligne pour chaque obs afin d'avoir la table que tu veux (en utilisant LAST.OBS puisque ta table en entrée est déjà triée)

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 133
    Points : 371
    Points
    371
    Par défaut
    Citation Envoyé par phi007 Voir le message
    Merci pour votre réponse, mais je ne vois pas comment je peux faire avec retain (sauf erreur de ma part il n'y a pas d'exemple de ce type dans le livre de M. Ringuede).
    peut être pas mais tous les outils dont vous avez besoin sont présentés ;-)

    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
     
     
    data test2;
       set test;
       by obs;
       retain date_nais2;
       if missing(date_nais)=0 then date_nais2=date_nais;
       array bloc(5) sexe X Y Z T ;
       array blac(5) $ sexe2 X2 Y2 Z2 T2 ;
       retain sexe2 X2 Y2 Z2 T2 ;
       do i=1 to 5;
         if missing(bloc(i))=0 then blac(i)=bloc(i);
       end;
       if last.obs then do;
          output;
          do i=1 to 5;
             blac(i)=.;
          end;
       end;
       keep date_nais2 sexe2 X2 Y2 Z2 T2;
    run;
    on doit quand même pouvoir faire plus élégant.. (mais je suis en vacances, pour l'élégance, on verra plus tard...)

    cordialement

    Sébastien Ringuedé

Discussions similaires

  1. Manipulation des lignes d'in fichier.txt R
    Par mimihh dans le forum R
    Réponses: 7
    Dernier message: 08/10/2013, 12h27
  2. (images binaires) manipulation des lignes
    Par lucastof dans le forum Images
    Réponses: 1
    Dernier message: 12/03/2011, 12h47
  3. Comment manipuler des lignes RichEdit avec attributs
    Par Nicolas Coolman dans le forum Débuter
    Réponses: 4
    Dernier message: 23/03/2009, 22h53
  4. Réponses: 14
    Dernier message: 07/09/2007, 22h45
  5. [VB6] Manipuler des cellules/lignes/colonne d'un Flexgrid
    Par zako dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 08/06/2006, 18h34

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