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 :

Transposer des données


Sujet :

SAS Base

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 58
    Points : 30
    Points
    30
    Par défaut Transposer des données
    Bonjour,

    J'ai une seule ligne dans ma table et six variables:

    region a b c d e
    bretagne 1 2 3 4 5

    je voudrais obtenir la chose suivante :

    bretagne
    a 1
    b 2
    c 3
    d 4
    e 5

    merci de votre aide !

  2. #2
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    ca doit pouvoir se faire avec la proc transpose la encore...

  3. #3
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    C'est pas plutôt 10 variable? si oui, éssaie ça

    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
    data M;
    input v1$ v2 $ v3$ v4$ v5$ v6$ v7$ v8$ v9$ v10$;
    cards;
    a b c d e 1 2 3 4 5
    ;
    run;
     
    data M;
    set M;
    array y(*) v1-v5;
    array y2(*) v6-v10;
    do i=1 to dim(y);
    c1=y(i);
    c2=y2(i);
    output;
    end;
    drop v: i;
    run;
    Bonne soirée

  4. #4
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    6 variables il me semble... enfin si je comprends son pb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    DATA M;
    input v1$ v2 $ v3$ v4$ v5$ v6$ ;
    cards; 
    region a b c d e
    bretagne 1 2 3 4 5
    ;
    run;
     
    proc transpose data=M out=MT(drop=_NAME_);
    var v1-v6;
    run;

    ludo, tu aurais pu t'en sortir tout seul...

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 58
    Points : 30
    Points
    30
    Par défaut
    merci beaucoup pour vos réponses.

    Cependant, je pense que j'ai mal posé mon problème: j'ai plusieurs tables de ce type à traiter, donc je ne connais pas les valeurs indiquées 1 , 2 , 3 , 4 et 5 (enfin je n'ai pas envie de toutes les taper).

    Puis-je quand même transposer les données comme je le souhaite ?

  6. #6
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Bien sûr que ça va marcher, la proc transpose fait référence à des variables et non les données contenues dans celles-ci.

  7. #7
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    deux choses:

    1/ formatage des variables est (à ma connaissance) assez rigide via la proc transpose. La longueur de la variable va être déterminée par la première observation, donc si une observation suivante à un chaine de caractère plus longue elle va être coupée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DATA M;
    input v1$ v2 $ v3$ v4$ v5$ v6$ ;
    cards; 	
    region a b c d e
    bretagne 1 cavacoupercherie 3 4 5
    ;
    run;
     
    proc transpose DATA=M out=MT(DROP=_NAME_);
    var v1-v6;
    run;
    c'est pour cette raison que d'une manière générale je préfère transposer par jointure multiple (enfin tant que ca reste abordable....)

    2/ si tu transpose beaucoup d'observations, cela te fera beaucoup de variables et je ne suis pas sur de jusqu'où sas peut aller. Il me semble que c'est 32000 avant la version 9.1. A partir de 9.1 on pourrait dépasser ce nombre mais le nombre max serait tributaire de ton environnement et l'attribut de ton fichier (par ex, le nombre de variables dépend de la longueur totale des variables)..

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 58
    Points : 30
    Points
    30
    Par défaut
    Voici l'erreur que j'ai lorsque je lance ma proc transpose:
    ERROR: Soit les racines ne correspondent pas soit le suffixe de départ est après le suffixe de fin.

    quelle en est la raison? cela devrait marcher!

  9. #9
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Citation Envoyé par ludo35 Voir le message
    Voici l'erreur que j'ai lorsque je lance ma proc transpose:
    ERROR: Soit les racines ne correspondent pas soit le suffixe de départ est après le suffixe de fin.

    quelle en est la raison? cela devrait marcher!
    C'est une liste de variables où tu as indiqué le nom de la 1e, le nom de la dernière et un tiret entre les deux, comme v1-v6. Dans ton code précisément, ça ne suit visiblement pas les règles pour que SAS comprenne :
    • tous les noms doivent commencer à l'identique (V ici)
    • après cette racine commune, il n'y a qu'un numéro
    • le premier n° cité est inférieur au dernier

    Si tu as écris v1-vb5 par exemple ça ne sera pas compris correctement.
    Bon courage.
    Olivier

  10. #10
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    Dans ton var de ta proc transpose, indique toutes tes variables que tu veux transposer, en reproduisant fidèlement leur nom, et en séparant chaque variable par un espace.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 58
    Points : 30
    Points
    30
    Par défaut
    merci beaucoup pour cet éclaircissement.

    En effet j'avais mis un tiret entre la premiere et la dernière variable.
    En listant les variables, ça fonctionne .

  12. #12
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Citation Envoyé par ludo35 Voir le message
    merci beaucoup pour cet éclaircissement.

    En effet j'avais mis un tiret entre la premiere et la dernière variable.
    En listant les variables, ça fonctionne .

  13. #13
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Citation Envoyé par ludo35 Voir le message
    En effet j'avais mis un tiret entre la premiere et la dernière variable.
    Si tu ne veux citer que la 1e et la dernière variable (en étant bien sûr qu'elles ne changeront JAMAIS de place !!!) tu peux écrire premiere -- derniere. (Avec deux tirets.)
    Et même premiere -NUMERIC- derniere ou premiere -CHARACTER- pour ne prendre qu'un certain type.

    Mais bon, c'est du dépannage parce que dans un programme en production, utilisé de manière récurrente, on n'a presque jamais la garantie que les variables ne vont pas jouer aux chaises musicales.
    Bon courage.
    Olivier

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

Discussions similaires

  1. JCL SORT - Transposer des données en lignes en colonne.
    Par aalex_38 dans le forum JCL - SORT
    Réponses: 1
    Dernier message: 06/03/2014, 18h35
  2. Transposer des données d'une feuille a une autre
    Par jawed dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 18/04/2008, 21h24
  3. transposer des donnés de orale vers mysql
    Par enamorada dans le forum Oracle
    Réponses: 9
    Dernier message: 04/04/2008, 08h55
  4. [VBA-E]transposer des données d'une feuille dans une autre
    Par lio62 dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 26/03/2007, 18h47
  5. Transposer des données sql dans un fichier texte
    Par Anakior dans le forum Outils
    Réponses: 3
    Dernier message: 11/12/2005, 10h01

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