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 :

Renommer des variables d'une table à partir d'une autre table SAS


Sujet :

SAS Base

  1. #1
    Membre du Club
    Profil pro
    None
    Inscrit en
    Avril 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : None

    Informations forums :
    Inscription : Avril 2012
    Messages : 53
    Points : 59
    Points
    59
    Par défaut Renommer des variables d'une table à partir d'une autre table SAS
    Bonjour,

    J'ai une table SAS avec des noms de variables non significatives, comme par exemple l_2011, l_2012...
    Et j'ai une autre table SAS qui fait correspondre à chacune de ces variables un label.

    Première table : donnees
    l_2011 l_2012 l_2013

    15 25 10
    33 20 14

    Deuxième table : metadonnees
    Nom_colonne label
    l_2011 nombre_licences_2011
    l_2012 nombre_licences_2012
    l_2013 nombre_licences_2013

    Donc je veux avoir dans la première table quelque chose comme :
    nombre_licences_2011 nombre_licences_2012 nombre_licences_2013
    15 25 10
    33 20 14

    Comment je peux procéder s'il vous plait ? Je suis coincé car je débute en SAS, merci

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur Pilotage
    Inscrit en
    Avril 2009
    Messages
    405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur Pilotage
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 405
    Points : 1 063
    Points
    1 063
    Par défaut
    Bjr,

    Possible via un proc transpose double et un proc sql

    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
    data donnees ; 
    input  l_2011 l_2012 l_2013 ; 
    cards ; 
    15 25 10
    33 20 14
    ;
    run ; 
     
    data metadonnees ; 
    input Nom_colonne $ label $20. ; 
    cards ; 
    l_2011 nombre_licences_2011
    l_2012 nombre_licences_2012
    l_2013 nombre_licences_2013
    ;
    run ; 
     
    proc transpose data = donnees out = donnees_tr ; run ; 
     
    proc sql ; 
    create table fusion as 
    select label , col1 , col2
    from donnees_tr left join metadonnees on donnees_tr._NAME_ = metadonnees.Nom_Colonne ; 
    run ; 
     
    proc transpose data = fusion out = table_finale (drop=_NAME_); 
    id label ; 
    run ;
    Cdt et bon courage
    I always thought that the person who specialized in using just SAS PROCS should
    be known as the SAS Proctologist.

  3. #3
    Membre du Club
    Profil pro
    None
    Inscrit en
    Avril 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : None

    Informations forums :
    Inscription : Avril 2012
    Messages : 53
    Points : 59
    Points
    59
    Par défaut
    Mercii je ne vais plus être perdu dans mes tables

  4. #4
    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
    Bonjour.
    J'essaye de devancer Géraldine avant qu'elle ne fasse la promo du CALL EXECUTE. C'est exactement ce dont tu as besoin, surtout si la table de données est grosse, car la solution du Lensois nécessite de la travailler pas mal.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    DATA _NULL_ ;
      SET work.metadonnees END=fin ;
      IF _N_=1 THEN DO ;
        CALL EXECUTE ("PROC DATASETS LIB=work NOLIST ;")
        CALL EXECUTE ("MODIFY donnees ;")
        CALL EXECUTE ("LABEL ") ;
      END ;
      CALL EXECUTE(nomColonne !! "=" !! QUOTE(STRIP(label)) ) ;
      IF fin THEN CALL EXECUTE(" ; RUN ; QUIT ;") ;
    RUN ;
    Bon courage.
    Olivier
    Bon courage.
    Olivier

  5. #5
    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
    Bonsoir,

    Il y a quelques semaines ont avait eu un participant qui s'interrogeait sur quand on devait utiliser le macro langage et quand on devait l'éviter.

    Je ne suis pas fan de macro langage, et si j'avais participé à la discussion je lui aurais simplement répondu que le macro langage doit rester cantonné autant que possible à la génération de code (implicitement piloté par des méta données).

    C'est exactement le cas ici (c'est même le cas type de ce pour quoi à mon sens le macro langage est fait), c'est pourquoi, une fois n'est pas coutume, je propose une solution version "macro" dérivée de la solution d'Olivier (avec quelques bouts de code de lelensois...).


    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
    DATA donnees ; 
    input  l_2011 l_2012 l_2013 ; 
    cards ; 
    15 25 10
    33 20 14
    ;
    run ; 
     
    DATA metadonnees ; 
    input Nom_colonne $ label $20. ; 
    cards ; 
    l_2011 nombre_licences_2011
    l_2012 nombre_licences_2012
    l_2013 nombre_licences_2013
    ;
    run ; 
     
    PROC SQL;
    SELECT Nom_colonne,Label  
    INTO :MV_COL SEPARATED BY "," , :MV_LABEL SEPARATED BY ","
    FROM metadonnees;
    QUIT;
     
    %MACRO m;
    PROC DATASETS LIB=work NOLIST ;
    MODIFY donnees ;
    LABEL /**RENAME**/
    %DO I=1 %TO %SYSFUNC(COUNTW("&MV_COL",","));
    %SYSFUNC(SCAN("&MV_COL",&I,",")) =%SYSFUNC(SCAN("&MV_Label",&I,","))
    %END;
    ;
    RUN;
    %MEND m;
     
    %m;

    Edit : Selon ce que tu veux faire tu peux remplacer LABEL par RENAME.

  6. #6
    Membre du Club
    Profil pro
    None
    Inscrit en
    Avril 2012
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : None

    Informations forums :
    Inscription : Avril 2012
    Messages : 53
    Points : 59
    Points
    59
    Par défaut
    Bonsoir,

    Vous avez raison, j'ai testé la première procédure sur une grande table, et SAS plantait, j'ai testé par la suite la marco et ça marche bien, merci bien pour votre aide précieuse

  7. #7
    Membre éclairé

    Femme Profil pro
    SAS FRANCE - Support Clients France et Europe
    Inscrit en
    Février 2010
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : SAS FRANCE - Support Clients France et Europe
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 289
    Points : 886
    Points
    886
    Par défaut
    Oui je l'avoue dès que j'ai vu la question j'ai pensé CALL EXECUTE, merci pour la dédicace
    Cordialement,

    --
    Géraldine CADE-DESCHAMPS
    Consultante ▪ Support Clients SAS
    Tel: +33 1 60 62 12 12 ▪ support@sas.com
    www.sas.com/france
    SAS® … THE POWER TO KNOW®

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/06/2011, 16h04
  2. UPDATE d'une Table à partir de deux autres Tables
    Par Marc_27 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/07/2009, 14h13
  3. Update d'une table à partir de deux autres tables
    Par Peewee766 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 04/05/2008, 19h08
  4. Réponses: 4
    Dernier message: 20/03/2007, 09h54
  5. creer une autre table à partir d'une requete
    Par papou34 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 15/02/2007, 22h42

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