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

  1. #1
    Candidat au Club
    Nouvelle mise en forme de tableau avec les variables d'une colonne en titre de colonne
    Bonjour,

    Je galère avec une mise en forme que je cherche à faire sous SAS.
    J'ai un tableau avec 3 colonnes en entrée (acheteur, vendeur, montant), et un nombre non précisé d'acheteurs et de vendeurs différents. Je souhaite obtenir un nouveau tableau avec toujours les acheteurs en colonne (mais sans répétition) et les vendeurs en ligne (sans répétition également).
    Pour être plus clair, voici un exemple de tableau en entrée et un en sortie:

    En entrée:


    [TH]acheteur[/TH]
    [TH]vendeur[/TH]
    [TH]montant[/TH]
    Albert Grandezone 300
    Albert Alarue 1000
    Maurice Grandezone 25
    Maurice Grosdiscount 453
    Maurice Lemeilleur 810
    Maurice Superprix 38
    Julie Lemeilleur 505
    Marie Grandezone 1024
    Marie Alarue 53
    Marie Superprix 848

    En sortie:


    [TH="align: left"]acheteur[/TH]
    [TH="align: left"]Grandezone[/TH]
    [TH="align: left"]Alarue[/TH]
    [TH="align: left"]Grosdiscount[/TH]
    [TH="align: left"]Lemeilleur[/TH]
    [TH="align: left"]Superprix[/TH]
    Albert 300 1000
    Maurice 25 453 810 38
    Julie 505
    Marie 1024 53 848


    Ma démarche, pour l'instant, a été la suivante:

    1) Enlever tous les doublons de la colonne vendeur pour avoir la liste de tous les vendeurs différents:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    PROC SORT DATA = entree NODUPKEY OUT = etape1;
    BY lib_raison_sociale;
    RUN;


    2) Conserver uniquement cette colonne vendeur:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    DATA etape2 (KEEP=vendeur);
    SET etape1;
    RUN
    ;

    3) Mettre la liste des vendeurs en abscisse:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    PROC TRANSPOSE data = etape2 out=etape3;
    Id vendeur;
    run;


    4) Ajouter ces colonnes vendeurs au tableau en entrée:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    DATA etape4 (DROP= _NAME_);
    MERGE entree etape3;
    RUN;


    5) C'est là que je bloque. Je voudrais donc compléter les colonnes des différents vendeurs par les montants dépensés par les acheteurs, mais je ne vois pas comment faire. J'ai envisagé une macro sur ces nouvelles colonnes vendeur puisque grâce à l'étape 2 je peux en connaître le nombre. Cependant, mes colonnes ne sont pas numérotées, et je ne veux pas perdre le nom de ces vendeurs dans mon tableau de sortie.

    Auriez_vous une idée pour que je puisse terminer ce traitement?

    Merci à tous.

  2. #2
    Membre éprouvé
    proc transpose
    Bonjour,

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    data test;
      input acheteur :$12. vendeur :$12. montant :8.;
      cards;
    Albert  Grandezone    300
    Albert  Alarue       1000
    Maurice Grandezone     25
    Maurice Grosdiscount  453
    Maurice Lemeilleur    810
    Maurice Superprix      38
    Julie   Lemeilleur    505
    Marie   Grandezone   1024
    Marie   Alarue         53
    Marie   Superprix     848
    run;


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    proc sort data=test;
      by acheteur vendeur;
    run;
     
    proc transpose data=test out=test_out(drop=_NAME_);
      var montant;
      by acheteur;
      id vendeur;
    run;


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    acheteur    Alarue    Grandezone    Lemeilleur    Superprix    Grosdiscount
    
    Albert       1000         300             .            .              .
    Julie           .           .           505            .              .
    Marie          53        1024             .          848              .
    Maurice         .          25           810           38            453


    Cordialement,

  3. #3
    Candidat au Club
    Oh merci, c'est super!
    ... super simple comme ça...
    Je faisais donc fausse route dès le début. Il faut que je retravaille cette proc !

###raw>template_hook.ano_emploi###