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.
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.
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 ¯oVariable ;
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
merci pour cette réponse.
Je vais essayer de faire cela en SQL, mais il faut que je retrouve la syntaxe....
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®
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.
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.
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®
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.
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...
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...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager