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

Macro Discussion :

Renommage des variables, des labels et des formats à l'aide d'une table de correspondance


Sujet :

Macro

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 255
    Points : 108
    Points
    108
    Par défaut Renommage des variables, des labels et des formats à l'aide d'une table de correspondance
    Bonjour,
    j'ai une base sas avec des formats et des labels associés.
    Le nom des formats correspond au nom des variables suffixés par "_F"

    J'aimerais renommer les variables, mais aussi les labels et les formats.

    J'ai une base sas de correspondance des variables entre ancien_nom et nouveau_nom.
    Y a t-il une possibilité de changer ces 3 éléments.

    Je suppose que c'est un problème qui a dû se poser à pas mal de personnes.
    D'avance merci.

  2. #2
    Membre actif
    Homme Profil pro
    Analyste - Information médicale
    Inscrit en
    Mars 2012
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste - Information médicale
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2012
    Messages : 72
    Points : 255
    Points
    255
    Par défaut
    Bonjour AlexFred,

    Regarde avec la fonction "call symputx" (ou par un proc sql si tu préfères) pour mettre tous tes anciens et nouveaux noms et labels en macros variables.
    Et avec une petite boucle "do to" tu fais x instructions "rename" et "label".
    Il doit y avoir des bouts de programme "touts faits" dans d'anciens messages sur le forum ou sur le net.
    Exemple : http://www2.sas.com/proceedings/sugi29/052-29.pdf

    Bon courage !

  3. #3
    Membre éprouvé
    Avatar de m.brahim
    Homme Profil pro
    SAS / BIG DATA
    Inscrit en
    Juillet 2011
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SAS / BIG DATA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 461
    Points : 1 119
    Points
    1 119
    Billets dans le blog
    14
    Par défaut
    Bonjour,

    Je te propose cette solution:
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    data test2;
    set sashelp.class;
    run;
     
    /*table de référence*/
    data test1;
    input anc_noms $ nv_noms $  nv_format $ ;
    cards;
    name namen $10.
    age agen 10.
    sex sexn $2.
    weight weightn 15.
    height heigthn 10.
    ;run;
     
    /* renommer les variables*/
    DATA _null_ ;
      SET test1 end=LAST;
      IF _n_=1 then call execute ('proc datasets lib=WORK ;   modify test2; rename') ;
     
      call execute ( compress (anc_noms) !! '=' !! compress (nv_noms) );
     
     
      IF last then call execute (';quit;');
    run ; 
     
    /*modifier les labels*/
     
    DATA _null_ ;
      SET test1 end=LAST;
      IF _n_=1 then call execute ('proc datasets lib=WORK ;   modify test2; label') ;
     
      call execute ( compress (nv_noms) !! '=' !! compress (nv_noms)||'_F' );
     
      IF last then call execute (';quit;');
    run ;
     
     
    /*modifier les formats*/
    proc sql noprint;
      select catx(' ',nv_noms,nv_format) into :formats separated by ' ' from  test1;
     
    quit;
    proc datasets nolist ;
      modify test2;
      format &formats;
      run;
    quit;

    Cordialement
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 255
    Points : 108
    Points
    108
    Par défaut
    Bonjour,
    tout d'abord merci à vous 2.

    Effectivement cette méthode marche très bien pour des fomats simple du style $10., 15., ...
    Mais comment faites vous avec des formats du style $name_F. qui renvoie à un catalogue de format contenant tous les anciens formats.

    Il faut que je les remplace d'abord dans le catalogue qui peut en contenir quelques milliers.
    Donc je me dis que soit je les remplace dans le programme sas de création du catalogue mais c'est un travail de fou, soit je les remplace directement en utilisant proc catalogue, mais j'avoue que je ne vois pas trop comment faire?
    Cordialement?

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    483
    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 : 483
    Points : 1 552
    Points
    1 552
    Par défaut
    Bonjour,
    J'ai repris et modifié une partie du code précédent pour te proposer une solution qui renomme les anciens formats du style $name_F.
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    data Classe ;
    set sashelp.class;
    run;	 
     
    /*table de correspondance */
    data corresp ;
    input anc_noms $ nv_noms $ anc_format $ ;
    cards;
    NAME NAMEN $NAME_F.
    AGE AGEN AGE_F.
    SEX SEXN $SEX_F.
    WEIGHT WEIGHTN WEIGHT_F.
    HEIGHT HEIGHTN HEIGHT_F.
    ;run;	  
     
    /* renommer les variables */
    DATA _null;
    SET corresp end=LAST;
    IF _n_=1 then call execute ('proc datasets lib=WORK ;  modify Classe ; rename') ;
     call execute ( compress (anc_noms) !! '=' !! compress (nv_noms) );
    IF last then call execute ('; quit ;') ;
    run ; 	 
     
    /* créer des nouveaux formats */
    data nv_format ;
    set corresp ;
    if findc(strip(anc_format), '$') then nv_format=cats('$', nv_noms, '_F.') ;
    else nv_format=cats(nv_noms, '_F.') ;
    run;	  
     
    proc format;
    value   $NAMEN_F ; 
    value     AGEN_F ; 
    value    $SEXN_F 'M'='1' 'F'='2' ;
    value  WEIGHTN_F ; 
    value  HEIGHTN_F ;
    run ;
     
    /* renommer les formats */
    DATA _null;
    SET nv_format end=LAST;
    IF _n_=1 then call execute ('proc datasets lib=WORK ;  modify Classe ; format') ;
     call execute ( strip(nv_noms) !! ' ' !! strip(nv_format) );
    IF last then call execute ('; quit ;') ;
    run ; 
     
    /* Vérification */
    proc contents data=Classe ; run ;
    Ward

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/09/2014, 23h56
  2. Créer un format à l'aide d'une table SAS
    Par Salamandar dans le forum SAS Base
    Réponses: 3
    Dernier message: 07/06/2011, 18h01
  3. [AC-2000] gestion des erreurs lors de l'importation d'un CSV dans une table formaté
    Par zandeparis dans le forum VBA Access
    Réponses: 1
    Dernier message: 02/11/2009, 23h45
  4. [MySQL] Récupération de variable dans My_sql dans des variables POST
    Par dirty_harry dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 04/05/2009, 18h10
  5. Réponses: 22
    Dernier message: 03/01/2008, 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