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 sous SAS


Sujet :

SAS Base

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    juillet 2015
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2015
    Messages : 61
    Points : 26
    Points
    26
    Par défaut Transposition sous SAS
    Bonjour,

    J'ai une base de cette forme:

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
     
    data AA;
    input annee$ num_ctr$ code$ cout nb
    cards;
     
    2015 AAA121  002 100 10
    2016 AAA121  002 100 10
    2017 AAA121  002 100 10
    2018 AAA121  002 100 10
     
    2015 AAA121  003 100 10
    2016 AAA121  003 100 10
    2017 AAA121  003 100 10
    2018 AAA121  003 100 10
     
    2015 AAA121  004 100 10
    2016 AAA121  004 100 10
    2017 AAA121  004 100 10
    2018 AAA121  004 100 10
     
    2015 AAA121  005 100 10
    2016 AAA121  005 100 10
    2017 AAA121  005 100 10
    2018 AAA121  005 100 10
     
    2015 AAA121  008 100 10
    2016 AAA121  008 100 10
    2017 AAA121  008 100 10
    2018 AAA121  008 100 10
     
    2015 AAA121  011 100 10
    2016 AAA121  011 100 10
    2017 AAA121  011 100 10
    2018 AAA121  011 100 10
     
    run;
    je veux avoir une base ainsi:

    data bb;
    set aa;
    num_ctr$ code002_NB_2015$ code002_NB_2016$ code002_NB_2017$ code002_NB_2018$ code003_NB_2015$ code003_NB_2016$ code003_NB_2017$ code003_NB_2018$ code004_NB_2015$ code004_NB_2016$ code004_NB_2017$ code012_NB_2018$code005_NB_2015$ code005_NB_2016$ code005_NB_2017$ code005_NB_2018$ code005_NB_2018$ code008_NB_2015$ code008_NB_2016$ code008_NB_2017$ code008_NB_2018$ code008_NB_2018$ code012_NB_2015$ code012_NB_2016$ code012_NB_2017$ code012_NB_2018$
    run;

    donc en gros avoir pour ce contrat 48 colonnes: 24 colonnes de la variable nb en fonction de l'année et la variable code, 24 colonnes pour la variable coût en fonction de l'année et la variable code... si c'est possible sans les array

    Un grand merci

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    ETUDES SAS
    Inscrit en
    avril 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ETUDES SAS
    Secteur : Finance

    Informations forums :
    Inscription : avril 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    je vous conseille d'utiliser Proc transpose. C'est ce qu'il y a de mieux pour transposer des matrices.

    Bon courage.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    juillet 2015
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Santé

    Informations forums :
    Inscription : juillet 2015
    Messages : 61
    Points : 26
    Points
    26
    Par défaut
    Bonjour,

    Je ne vois pas comment le faire avec deux variables:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Proc sort data= aa ;by annee nb_crr;run;
    Proc transpose data=aa;
    Var Nb cout 
    By annee nb_crt;
    Run;

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    janvier 2013
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : janvier 2013
    Messages : 456
    Points : 1 492
    Points
    1 492
    Par défaut
    Bonjour et Bonne année à tout le monde :
    Je pense que CALL EXECUTE peut faire l'affaire sans passer par une étape intermédiaire de transformation des données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    data _NULL_ ;
    set AA end=FIN ; 	 
    if _n_=1 then 
    call execute('data BB (drop=annee code cout nb) ; set AA end=OK ; ') ;
    call execute('Cod'||strip(code)||"_NB_"||strip(annee)||'=NB ; ') ;	 
    call execute('Cod'||strip(code)||"_COUT_"||strip(annee)||'=COUT ; ') ;	 
    if FIN then call execute('if OK then output ; run ;') ;  
    run ;
    Bon Courage
    Ward

Discussions similaires

  1. Transposition sous SAS: col en ligne
    Par moustache78500 dans le forum SAS Base
    Réponses: 6
    Dernier message: 12/07/2019, 23h46
  2. Transposition sous SAS
    Par moustache78500 dans le forum SAS Base
    Réponses: 9
    Dernier message: 26/05/2016, 13h35
  3. [IML] Intégrale sous SAS
    Par helenei dans le forum SAS IML
    Réponses: 4
    Dernier message: 13/05/2008, 12h56
  4. Cartographie sous SAS
    Par CélineM dans le forum ODS et reporting
    Réponses: 10
    Dernier message: 17/04/2008, 12h25
  5. comment manipuler les OLAP sous SAS
    Par Bessa_bd dans le forum Outils BI
    Réponses: 5
    Dernier message: 28/01/2008, 18h44

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