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 :

PROC TRANSPOSE avec deux variables


Sujet :

SAS Base

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 9
    Points : 2
    Points
    2
    Par défaut PROC TRANSPOSE avec deux variables
    Bonjour à tous,

    Je dois transposer des données avec SAS mais je n'arrive à concrétiser la solution à mon besoin.

    Après de nombreuses étapes j'ai réussi à créer la table SAS WORK.STOCGARCPT_CDCDS111_DETTE2 suivante:

    Nom : sas1.JPG
Affichages : 3801
Taille : 55,7 Ko

    Je voudrais transposer les données pour afficher en ligne les données LB_VAL et MTDET pour chaque IDSUR CDCDS CDETA CDSOUETA DTACQ MTSURREV MTSUR.
    De plus, les noms des colonnes de LBVAL devraient etre LBDONCOM3,LBDONCOM4, LBDONCOM5...

    Nom : sas2.JPG
Affichages : 3665
Taille : 19,2 Ko

    Est ce possible avec une procédure transpose unique; je n'arrive pas obtenir ce résultat?

    Si j'utilise basiquement la proc transpose avec 2 var comme ci-dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    proc transpose data=WORK.STOCGARCPT_CDCDS111_DETTE2 out=WORK.STOCGARCPT_CDCDS111_FINAL;
      by IDSUR CDCDS CDETA CDSOUETA DTACQ MTSURREV MTSUR;
      var LB_VAL MTDET;
    run ;
    J'obtiens alors des données transposées mais sur 2 lignes par IDSUR CDCDS CDETA CDSOUETA DTACQ MTSURREV MTSUR. Une ligne pour les données LB_VAL et une ligne pour MTDET.

    Par ailleurs, je ne te peux trier les données sur MTDET. Le tri de la table est le suivant: IDSUR (alphanumérique) RNG (numérique).

    Si quelqu'un aurait une piste pour m'aiguiller, je lui en serai reconnaissant.

    Merci de m'avori lu.

  2. #2
    Membre éprouvé
    Avatar de steelspirit
    Homme Profil pro
    SAS discute
    Inscrit en
    Janvier 2008
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SAS discute
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 472
    Points : 916
    Points
    916
    Par défaut
    Bonjour,
    Une solution serait de faire un proc transpose pour LB_VAL et un autre pour MTDET puis de faire un merge des 2 tables :
    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
     
    proc transpose data=WORK.STOCGARCPT_CDCDS111_DETTE2 out=WORK.STOCGARCPT_CDCDS111_LBVAL prefix=LBDONCOM;
      by IDSUR CDCDS CDETA CDSOUETA DTACQ MTSURREV MTSUR;
      var LB_VAL ;
      id RNG;
    run ;
    proc transpose data=WORK.STOCGARCPT_CDCDS111_DETTE2 out=WORK.STOCGARCPT_CDCDS111_MTDET prefix=MTDET;
      by IDSUR CDCDS CDETA CDSOUETA DTACQ MTSURREV MTSUR;
      var MTDET;
      id RNG;
    run ;
     
    DATA WORK.STOCGARCPT_CDCDS111_FINAL;
        merge WORK.STOCGARCPT_CDCDS111_LBVAL WORK.STOCGARCPT_CDCDS111_MTDET ;
        by IDSUR CDCDS CDETA CDSOUETA DTACQ MTSURREV MTSUR;
    RUN;
    Bon courage,
    Steel
    Avant de poser votre question, n'oubliez pas :
    FAQ, SAS DOC et de ce forum

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Merci mais si je ne me trompe pas mon résultat sera le suivant (au niveau de l'ordre des colonnes)::

    IDSUR CDCDS CDETA CDSOUETA DTACQ MTSURREV MTSUR LBDONCOM3 LBDONCOM4 LBDONCOM5 LBDONCOM6 .... MTDET3 MTDET4 MTDET5 MTDET6

    alors que je souhaite:
    IDSUR CDCDS CDETA CDSOUETA DTACQ MTSURREV MTSUR LBDONCOM3 MTDET3 LBDONCOM4 MTDET4 LBDONCOM5 MTDET5 LBDONCOM6 MTDET6....

  4. #4
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    j'ai quand meme testé et j'avais vu juste.

    Alors , on pourrait s'amuser a faire 8 tables pour le LB_VAL et le MTDET et merger ensuite dans l'ordre mais c'est vraiment trop sale

  5. #5
    Membre éprouvé
    Avatar de steelspirit
    Homme Profil pro
    SAS discute
    Inscrit en
    Janvier 2008
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SAS discute
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 472
    Points : 916
    Points
    916
    Par défaut
    depuis quand l'ordre des variables d'un dataset est important ?

    Bon OK parceque c'est toi je vais te donner une astuce : on peut tricher et mettre un RETAIN avant un SET ou un MERGE dans une étape data pour changer l'ordre des variables...
    du coup en utilisant une macro tu peux faire un truc dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    %macro test;
    DATA STOCGARCPT_CDCDS111_FINAL_2;
    	retain IDSUR CDCDS CDETA CDSOUETA DTACQ MTSURREV MTSUR
    		%do i=3 %to 10;
    			LBDONCOM&i MTDET&i
    		%end;
    	;
        set  STOCGARCPT_CDCDS111_FINAL;
    RUN;
    %mend;
    %test
    Evidemment les valeurs de ta boucle %do i=3 %to 10 peuvent être récupérées automatiquement et stockées dans des macro variables (en utilisant une proc sql par exemple).

    Bon courage,
    Steel
    Avant de poser votre question, n'oubliez pas :
    FAQ, SAS DOC et de ce forum

Discussions similaires

  1. PROC TRANSPOSE avec variable texte
    Par sniper75 dans le forum SAS Base
    Réponses: 2
    Dernier message: 19/11/2013, 12h47
  2. proc TRANSPOSE avec 2 tables
    Par L0007 dans le forum Débutez
    Réponses: 9
    Dernier message: 24/03/2011, 09h31
  3. Réponses: 1
    Dernier message: 17/08/2008, 13h20
  4. [Tableaux] Switch avec deux variables, comment ?
    Par sandddy dans le forum Langage
    Réponses: 5
    Dernier message: 27/09/2007, 10h14
  5. PB proc stock avec like variable %
    Par pseudomh dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 31/03/2005, 11h49

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