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 :

Prefixer l'ensemble des variables


Sujet :

SAS Base

  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 Prefixer l'ensemble des variables
    Bonjour,
    je cherche le moyen de préfixer l'ensemble des variables d'une base par une chaine du style "TXX"_
    Y a t-il une méthode pour faire cela rapidement?

    merci.

  2. #2
    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
    Rapide, je ne sais pas, mais ce que je ferais c'est :
    1) une proc CONTENTS avec une option OUT pour avoir la liste des variables
    2) du SQL pour créer une chaîne constituée de la concaténation du nom actuel (variable NAME), d'un signe =, de du nom préfixé (concaténation de ton TXX_ et de NAME, encore une fois)
    3) dans la même requête SQL, tu crées une macro-variable avec INTO SEPARATED BY " " pour stocker la liste des chaînes ancien_nom=nouveau_nom
    4) dans une étape DATA, tu fais RENAME &macroVariable ;

    Ce n'est peut-être pas le plus rapide (si tes noms de variables ont tous des numéros, il y a plus simple) mais c'est totalement automatique.
    Bon courage.
    Olivier

  3. #3
    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
    merci pour cette réponse.

    Je vais essayer de faire cela en SQL, mais il faut que je retrouve la syntaxe....

  4. #4
    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
    Bonjour,

    c'est une bonne problématique pour le CALL EXECUTE !
    Il faut lister les variables avec une proc contents, puis lire ce résultat pour générer une PROC DATASETS qui renommera toutes les variables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    data class ;
      set sashelp.class ;
      run ;
    proc contents data=class noprint out=_contents ;
    run ;
     
    data _null_ ;
      set _contents end=LAST;
      if _n_=1 then call execute ('proc datasets lib=WORK ;   modify CLASS ; rename ') ;
     
      call execute ( compress (name) !! '=' !! compress ('TXT_' !! name) );
     
      if last then call execute (';quit;');
    run ;

    Cordialement,
    Géraldine Cade Deschamps
    Support Clients SAS
    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®

  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
    Bonjour, j'aime bien la solution de Géraldine, car elle a la vertu d'être "données-indépendante", le temps d'exécution semblant décorrélé de la taille du fichier.

  6. #6
    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
    Merci beaucoup pour cette solution.

    on ne pense pas à ce genre de méthode apparemment très efficace.

    Je vais me pencher à l'avenir sur ce call execute....

    Je vais tout de même essayer la méthode avec SQL pour m'entrainer... en espérant y arriver. et je reviendrais vers vous si je rencontre un problème.

  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 le CALL EXECUTE n'est pas très répandu mais réponds bien souvent à des problématiques complexes, il a besoin d'un peu de publicité !

    J'ai écrit un petit article à son sujet il y a quelques années : http://www.sas.com/offices/europe/fr...port_14_bd.pdf
    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®

  8. #8
    Membre éclairé
    Homme Profil pro
    responsable adjoint service stat
    Inscrit en
    Mars 2009
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : responsable adjoint service stat
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2009
    Messages : 448
    Points : 823
    Points
    823
    Par défaut
    J'adore cette solution !
    Me suis toujours demandé à quoi servait ce call execute concrètement, je suis servi.
    Mon côté perfectionniste tendrait à rajouter une alerte sur les noms de variables de longueur > 28, qui seront de longueur > 32 après rajout du préfixe.

    Le même code est facilement utilisable pour changer les labels d'une table aussi. Je fais ça (mais sans le call execute) quand je fusionnes plusieurs tables, en rajoutant comme suffixe le nom de la table source aux labels des variables : pratique pour voir de quelle table source vient la variable.

  9. #9
    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
    Merci Rémi pour cette remarque.
    Effectivement cela peut être embêtant si l'on dépasse la longueur limite.

    A rajouter ...
    Et pourquoi pas pour les labels...

  10. #10
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 14
    Points : 20
    Points
    20
    Par défaut
    Génial ! Ca marche très bien.
    Question subsidiaire : est-il possible de rentrer une exception à la liste de variables à renommer ?
    Par exemple pour préserver de ce renommage une clé commune entre différentes tables à joindre ? (et sans refaire une micro étape data derrière, pas compliqué mais tant qu'à faire...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/02/2010, 11h06
  2. Avoir la liste dans l'ensemble des variables définies
    Par Jonathan.b dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 04/02/2010, 21h11
  3. Réponses: 11
    Dernier message: 19/05/2009, 16h52
  4. [VB6] [Fichier] Enregistrer des variables de structure
    Par de.bo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/10/2002, 11h09
  5. Réponses: 4
    Dernier message: 18/07/2002, 13h32

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