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 :

Transformation d'un tableau "mise à la ligne"


Sujet :

SAS Base

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

    Informations forums :
    Inscription : Juillet 2012
    Messages : 33
    Points : 34
    Points
    34
    Par défaut Transformation d'un tableau "mise à la ligne"
    Bonjour,
    j'essaie de transformer un "vecteur " en tableau. Je dispose de données sur une seule ligne pour les 12 mois de l'année de plusieurs années à la suite.

    Le nombre d'année est nom constant d'une étude à l'autre.

    Je souhaite obtenir une ligne par année, suivant le schéma suivant:

    Forme initiale:

    DATA entree;
    input P_012008 P_022008 P_032008 P_042008 P_052008 P_062008 P_072008 P_082008 P_092008 P_102008 P_112008 P_122008 P_012009 P_022009 P_032009 P_042009 P_052009 P_062009 P_072009 P_082009 P_092009 P_102009 P_112009 P_122009 P_012010 P_022010 P_032010 P_042010 P_052010 P_062010 P_072010 P_082010 P_092010 P_102010 P_112010 P_122010
    ;
    cards;
    150 200 333 128 356 545 452 222 341 123 456 654 233 155 217 337 133 373 549 457 239 345 128 473 658 237 133 490 455 133 373 549 457 239 758 465
    ;
    run;

    Forme finale souhaitée:

    DATA sortie;
    format Annee;
    input Annee Janvier Fevrier Mars Avril Mai Juin Juillet Aout Septembre Octobre Novembre Décembre
    ;
    cards;
    2008 150 200 333 128 356 545 452 222 341 123 456 654
    2009 233 155 217 337 133 373 549 457 239 345 128 473
    2010 658 237 133 490 455 133 373 549 457 239 758 465
    ;
    run;


    Alternative de la forme finale: (peut être en utilisant substr)
    DATA sortie;
    format Annee;
    input Annee M01 M02 M03 M04 M05 M06 M07 M08 M09 M10 M11 M12
    ;
    cards;
    2008 150 200 333 128 356 545 452 222 341 123 456 654
    2009 233 155 217 337 133 373 549 457 239 345 128 473
    2010 658 237 133 490 455 133 373 549 457 239 758 465
    ;
    run;

    Je ne sais pas comment m'y prendre sous SAS. est ce que l'on peut transformer un vecteur en tableau et utiliser substr(nom_colonne,4) pour récupérer l'année et cats + substr(nom_colonne,3,2) pour récupérer le mois?

    Merci pour votre aide.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Attaché statisticien
    Inscrit en
    Mai 2011
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Attaché statisticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 687
    Points : 1 581
    Points
    1 581
    Par défaut
    rebonjour

    par une double proc transpose (j'ai rajouté une variable d'identifiant de ligne id1)

    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
    DATA entree;
    input id1 P_012008 P_022008 P_032008 P_042008 P_052008 P_062008 P_072008 P_082008 P_092008 P_102008 P_112008 P_122008 P_012009 P_022009 P_032009 P_042009 P_052009 P_062009 P_072009 P_082009 P_092009 P_102009 P_112009 P_122009 P_012010 P_022010 P_032010 P_042010 P_052010 P_062010 P_072010 P_082010 P_092010 P_102010 P_112010 P_122010
    ;
    cards;
    1 150 200 333 128 356 545 452 222 341 123 456 654 233 155 217 337 133 373 549 457 239 345 128 473 658 237 133 490 455 133 373 549 457 239 758 465
    2 1150 1200 1333 1128 1356 1545 1452 1222 1341 1123 1456 1654 1233 1155 1217 1337 1133 1373 1549 1457 1239 1345 1128 1473 1658 1237 1133 1490 1455 1133 1373 1549 1457 1239 1758 1465
    ;
    run;
     
    PROC TRANSPOSE DATA=entree OUT=sortie;
    BY id1;
    RUN;
     
    DATA sortie;SET sortie;
    ANNEE=SUBSTR(_NAME_,5,4);
    MOIS='M'!!SUBSTR(_NAME_,3,2);
    DROP _NAME_;
    RUN;
     
    PROC TRANSPOSE DATA=sortie OUT=resultat(DROP=_NAME_);
    BY ID1 ANNEE;
    VAR COL1;
    ID MOIS;
    RUN;
    ps : "vecteur" vocabulaire à éviter dans les Table sas , penser "colonne-variable" et "ligne-observation".

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 33
    Points : 34
    Points
    34
    Par défaut Merci
    Merci pour cette solution qui fonctionne parfaitement. Je n'avais pas pensé du tout à transposer 2 fois.
    Bonne soirée

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/04/2015, 02h23
  2. [CR XI] Tableau Croisé - mise en forme hauteur de ligne
    Par limougon dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 02/05/2011, 15h46
  3. mise en ligne
    Par zorba49 dans le forum ASP
    Réponses: 4
    Dernier message: 16/05/2005, 14h10
  4. Réponses: 1
    Dernier message: 28/03/2005, 12h33

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