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

  1. #1
    Futur Membre du Club
    Changer les noms de variables > Référentiel
    Bonjour,

    Voici ma problématique :

    J'ai une table SAS avec ces informations :

    MARCHE INDICATEUR 4 SEMAINES JUSQU'AU 14/08/16 4 SEMAINES JUSQU'AU 11/09/16 4 SEMAINES JUSQU'AU 09/10/16 4 SEMAINES JUSQU'AU 06/11/16
    PIZZA VOLUME 15 20 25 30
    SALADE VOLUME 30 22 11 15
    LEGUME VOLUME 120 210 51 75


    Je voudrais changer les noms des colonnes 4 SEMAINES JUSQU'AU 14/08/16 en P1_2016, pour ce faire, j'ai une table de correspondance :

    VALINI VALOUT
    4 SEMAINES JUSQU'AU 14/08/16 P1_2016
    4 SEMAINES JUSQU'AU 11/09/16 P2_2016
    4 SEMAINES JUSQU'AU 09/10/16 P3_2016
    4 SEMAINES JUSQU'AU 06/11/16 P4_2016

    Dans la vraie vie, j'ai beaucoup plus de variables, comment je peux faire pour passer de '4 semaines... ' à 'P1_' ??

    Merci par avance pour votre aide

  2. #2
    Membre actif
    Bonjour,

    Je te donne une méthode à partir de la table sashelp.class :
    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
     
    * Je crée une table avec mes noms de variables à changer;
    data noms;
    valini='age'; valout='age_nomme'; output;
    valini='sex'; valout='sex_nomme'; output;
    run;
     
    * Je mes mes noms avant (in) et mes noms après (out) en macro-variable : de 1 à nb variables sont créées en entrée et en sortie; 
    data _null_;
    set noms;
    call symputx('nb',_n_);
    call symputx(compress('in'!!_n_),valini);
    call symputx(compress('out'!!_n_),valout);
    run;
     
    * Pour voir les macros variables créées;
    %put _user_;
     
    * Je renomme par une boucle mes variables de 1 à nb;
    %macro renomme();
    data x;
    set sashelp.class;
    %do i=1 %to &nb.;
    rename &&in&i..=&&out&i..;
    %end;
    run;
    %mend renomme;
    %renomme();


    A adapter à ton programme.
    Il existe surement aussi une méthode avec des vecteurs mais j'ai un peu oublié comment les utiliser.
    Bon courage !

  3. #3
    Membre expérimenté
    Citation Envoyé par Donch Voir le message
    Bonjour,

    Voici ma problématique :

    J'ai une table SAS avec ces informations :..............
    Bonjour,
    les noms des colonnes commençant par "4 SEMAINES JUSQU'AU 14/08/16 " ne respectent pas les règles définies par SAS. La question qui se pose comment tu as pu lire la table et par quel moyen ? La réponse à cette question nous permet d'envisager une solution adéquate à ta problématique.

    Cordialement Ward

  4. #4
    Futur Membre du Club
    Citation Envoyé par hossward Voir le message
    Bonjour,
    les noms des colonnes commençant par "4 SEMAINES JUSQU'AU 14/08/16 " ne respectent pas les règles définies par SAS. La question qui se pose comment tu as pu lire la table et par quel moyen ? La réponse à cette question nous permet d'envisager une solution adéquate à ta problématique.

    Cordialement Ward
    Bonjour,

    C'est un import Excel. C'est justement ce pourquoi je veux réussir à modifier les noms des variables sans passer par une transformation du fichier xlsx source.

  5. #5
    Futur Membre du Club
    Citation Envoyé par Fabien G. Voir le message
    Bonjour,

    Je te donne une méthode à partir de la table sashelp.class :
    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
     
    * Je crée une table avec mes noms de variables à changer;
    data noms;
    valini='age'; valout='age_nomme'; output;
    valini='sex'; valout='sex_nomme'; output;
    run;
     
    * Je mes mes noms avant (in) et mes noms après (out) en macro-variable : de 1 à nb variables sont créées en entrée et en sortie; 
    data _null_;
    set noms;
    call symputx('nb',_n_);
    call symputx(compress('in'!!_n_),valini);
    call symputx(compress('out'!!_n_),valout);
    run;
     
    * Pour voir les macros variables créées;
    %put _user_;
     
    * Je renomme par une boucle mes variables de 1 à nb;
    %macro renomme();
    data x;
    set sashelp.class;
    %do i=1 %to &nb.;
    rename &&in&i..=&&out&i..;
    %end;
    run;
    %mend renomme;
    %renomme();


    A adapter à ton programme.
    Il existe surement aussi une méthode avec des vecteurs mais j'ai un peu oublié comment les utiliser.
    Bon courage !
    ça marche parfaitement ! je te remercie !!

###raw>template_hook.ano_emploi###