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 :

Transposition de données un peu complexe


Sujet :

SAS Base

  1. #1
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Points : 324
    Points
    324
    Par défaut Transposition de données un peu complexe
    Bonjour,

    Je dispose d'une table conçue en mode 1 ligne = 1 période * 1 individu, avec des variables qui peuvent être fixes sur toutes les périodes et d'autres non. J'aimerais "transposer" cette table en mode 1 ligne = 1 individu, avec, pour les variables fixe sur toutes les périodes, une seule variable qui m'indiquerait la valeur, et pour les autres, autant de variables que de périodes, avec reprise de la dernière valeur tant qu'on n'a pas de nouvelle période.

    Un exemple en espérant que ça soit plus clair :


    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
     
    data entree;
    input id periode generation sexe $ quanti1 quanti2;
    cards;
    1 1 1980 F 1 2
    1 3 1980 F 5 3
    1 7 1980 F 23 4
    2 1 1982 H 12 6
    2 2 1982 H 15 8
    2 4 1982 H 26 11
    ;
    run;
     
    data sortie;
    input id generation sexe $ quanti1_1-quanti1_7 quanti2_1-quanti2_7;
    cards;
    1 1980 F 1 1 5 5 5 5 23 2 2 3 3 3 3 4
    2 1982 H 12 15 15 26 26 26 26 6 8 8 11 11 11 11
    ;
    run;
    J'ai essayé de commencer à résoudre le problème avec la proc transpose mais avant même de tenter de répliquer mes informations entre deux périodes, je n'arrive pas à résoudre un premier point :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    data entree2;
    set entree;
    periodeText = "P_"||left(periode);
    run;
     
    proc transpose data=entree2 out=sortietest;
    by ident generation sexe;
    var quanti1 quanti2;
    id periodeText;
    quit;
    => En faisant ainsi, je n'ai pas les variables quanti1 et quanti2 "en colonnes" mais sur deux lignes, ce qui fait que je n'ai pas une ligne = 1 individu

    NB : je passe par l'option id dans la proc transpose pour que les données correspondent bien à la bonne période (avec une bidouille de concaténation histoire d'avoir des noms de variable texte) mais je n'ai pas le bon nombre de colonnes (7 dans mon exemple) ainsi.

    Merci d'avance pour vos idées :-)
    Alqua

  2. #2
    Membre éprouvé
    Homme Profil pro
    Statisticien/développeur BI
    Inscrit en
    Janvier 2012
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Statisticien/développeur BI
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2012
    Messages : 326
    Points : 1 142
    Points
    1 142
    Par défaut
    Bonjour,

    Sans proc transpose, mais en étape data avec des array :

    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 sortie (drop=i j periode quanti1 quanti2);
    set entree;
    by id periode;
    array q1(7) quanti1_1-quanti1_7;
    array q2(7) quanti2_1-quanti2_7;
    retain  quanti1_1-quanti1_7 quanti2_1-quanti2_7;
    do i=1 to 7;
    	if i ge periode then do j=i to 7;
    		q1(j) = quanti1;
    		q2(j) = quanti2;
    	end;
    end;
    if last.id then output;
    run;

  3. #3
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    366
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 366
    Points : 324
    Points
    324
    Par défaut
    Bonjour edward,

    Merci beaucoup pour la réponse ! J'étais un peu empêtré dans mon proc transpose, j'en ai oublié les fondamentaux. C'est parfait !

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/04/2013, 12h00
  2. Gérer un Formulaire un peu complexe pour moi
    Par budylove dans le forum Langage
    Réponses: 3
    Dernier message: 17/05/2006, 10h01
  3. Un Alignement un peu complexe
    Par Jeskor dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 27/04/2006, 17h04
  4. Requête de sélection un peu complexe
    Par new_wave dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 03/01/2006, 14h44
  5. Requete un peu complexe avec la fonction IN
    Par Taichin dans le forum Oracle
    Réponses: 27
    Dernier message: 10/11/2004, 08h59

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