Existe-t-il une option magique de type "Auto-Rename" ? Non, pas nativement dans le Data Step. Mais voici les trois solutions proposées par les experts pour contourner cette corvée.
1. La Solution SQL : L'usage des Alias
C'est souvent l'alternative la plus propre. Contrairement au Data Step, PROC SQL permet de manipuler deux colonnes de même nom en les préfixant par leur table d'origine (alias).
Vous n'avez pas besoin de renommer les variables avant le calcul, vous le faites à la volée.
proc sql;
create table test as
select a.id,
a.X,
b.X as X_Beta, /* Renommage simple pour la sortie */
(a.X - b.X) as Diff_X, /* Calcul direct sans renommage préalable */
(a.Y - b.Y) as Diff_Y
from alpha as a,
beta as b
where a.id = b.id;
quit;
1
PROC SQL;
2
create TABLE test as
3
select a.id,
4
a.X,
5
b.X as X_Beta, /* Renommage simple pour la sortie */
6
(a.X - b.X) as Diff_X, /* Calcul direct sans renommage préalable */
7
(a.Y - b.Y) as Diff_Y
8
from alpha as a,
9
beta as b
10
where a.id = b.id;
11
QUIT;
Avantage : Code plus lisible et logique mathématique directe.
proc compare base=alpha compare=beta;
id id;
var X Y Z;
run;
1
PROC COMPARE base=alpha compare=beta;
2
id id;
3
var X Y Z;
4
RUN;
3. La Solution "Hacker" : Macro Dynamique
Si vous tenez absolument à utiliser un Data StepMERGE et que vous avez 100 variables à renommer, la solution est de générer la liste RENAME=(...) dynamiquement via une Macro.
Le principe est le suivant :
Lire les métadonnées de la table BETA (via PROC CONTENTS ou les vues dictionnaires).
Construire une chaîne de caractères : X=X_Beta Y=Y_Beta ....
Injecter cette chaîne dans le code.
%macro auto_rename(lib, ds, suffix);
/* Code simplifié pour l'exemple */
proc sql noprint;
select catx('=', name, catx('_', name, "&suffix"))
into :renamelist separated by ' '
from dictionary.columns
where libname=upcase("&lib") and memname=upcase("&ds");
quit;
/* Renvoie la chaîne générée */
&renamelist
%mend;
/* Utilisation */
data test;
merge alpha
beta(rename=( %auto_rename(WORK, BETA, Beta) ));
by id;
run;
Les codes et exemples fournis sur WeAreCAS.eu sont à but pédagogique. Il est impératif de ne pas les copier-coller aveuglément sur vos environnements de production. La meilleure approche consiste à comprendre la logique avant de l'appliquer. Nous vous recommandons vivement de tester ces scripts dans un environnement de test (Sandbox/Dev). WeAreCAS décline toute responsabilité quant aux éventuels impacts ou pertes de données sur vos systèmes.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.