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 :

Enlever les suffixes d'une variable


Sujet :

Macro

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Statisticien
    Inscrit en
    Novembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Novembre 2016
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Enlever les suffixes d'une variable
    Bonjour,

    Dans le cadre du traitement d'une base SAS, j'ai de très nombreuses variables qui possèdent trois suffixes différents tous de type _0000. Les chiffres ne sont pas forcément 0000 mais une chaîne de quatre chiffres.

    Autant, je ne rencontre pas de problèmes pour renommer des variables et leur ajouter un suffixe à l'aide d'une macro autant je suis bloquée pour les enlever.

    A l'heure actuelle, j'ai contourné le problème en faisant un proc contents de ma table, en les récupérant dans un csv que j'ouvre avec notepad++. Puis, j'utilise une expression régulière pour arriver à avoir rename var_suffixe=var;
    Cependant, il faut ensuite que je copie colle cette partie de texte sous Notepad++ sur SAS et que j'exécute le programme.

    Je pense qu'il doit y avoir une solution plus rapide mais j'aurai besoin de votre aide pour cela.

    Merci d'avance.

  2. #2
    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
     
    Data test;
    input var1_0000 var2_0001;
    cards;
    123 224
    ;run;
     
    proc contents data =test out=test1;
    run;
     
    DATA _null_ ;
      set test1 end=eof;
       call execute ('proc datasets lib=WORK ;   modify test ; rename ') ;
       call execute ( compress (name) !! '=' !! compress (scan(name,1,'_')));
       call execute (';quit;');
    run ;
    Cordialement
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Statisticien
    Inscrit en
    Novembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Novembre 2016
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Merci pour votre réponse.

    Je viens de le tester et cela marche sans problème dans votre exemple.

    Pour ma base, cela marche pour quelques variables mais pas toutes malheureusement. En effet, j'ai du manquer de précision lors de l'explication de mon problème. En effet, cela fonctionne bien pour les variables qui sont de type var_0000 mais en fait le var peut être de la forme suivante : tt_ddkdkd_0000 ou encore avoir d'autres underscore dans le nom ou avoir un nombre de caractères entre underscore qui varie. La seule constante est le suffixe _0000 ou encore _0001 ou _2015. Le suffixe se compose toujours d'un underscore et de quatre chiffres.

    Je vous remercie pour votre réponse.

  4. #4
    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
    Une solution avec les expressions règulières et call execute

    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 test;
    input var var1_0000 var2_0001 var1_var2_0001;
    cards;
    1 123 224 125
    ;run;
     
    proc contents data =test out=test1;
    run;
     
    DATA _null_ ;
      set test1 end=eof;
       IF _N_=1 THEN RE = PRXPARSE("/\_\d{4}/");
       MATCH = PRXMATCH(RE,name);
       IF MATCH GT 0 THEN DO;
       call execute ('proc datasets lib=WORK ;   modify test ; rename ') ;
       call execute ( compress (name) !! '=' !! compress (substr(name,1,MATCH-1)));
       call execute (';quit;');
       end;
    run ;
    Cordialement
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Statisticien
    Inscrit en
    Novembre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Novembre 2016
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Je vous remercie beaucoup pour votre aide.

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

Discussions similaires

  1. [Batch] Enlever les espaces d'une variable
    Par student524 dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 15/11/2014, 21h26
  2. [PHP 5.0] Enlever les doublons dans une variable
    Par raphy31 dans le forum Langage
    Réponses: 10
    Dernier message: 26/03/2014, 10h10
  3. enlever les 0 devant une chaine
    Par linux dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 17/03/2006, 11h06
  4. [VBA-E]enlever les liens d'une requete externe
    Par arnogef dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/02/2006, 14h21
  5. algorithme pour enlever les occurences d'une liste
    Par bendenice dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 08/02/2006, 23h28

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