¿Existe una opción mágica de tipo "Auto-Renombrar"? No, no de forma nativa en el Data Step. Pero aquí están las tres soluciones propuestas por los expertos para sortear esta tarea tediosa.
1. La Solución SQL: El uso de Alias
A menudo es la alternativa más limpia. A diferencia del Data Step, PROC SQL permite manipular dos columnas con el mismo nombre prefijándolas con su tabla de origen (alias).
No necesitas renombrar las variables antes del cálculo, lo haces sobre la marcha.
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;
Ventaja: Código más legible y lógica matemática directa.
2. La Solución "Herramienta Dedicada": PROC COMPARE
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 Solución "Hacker": Macro Dinámica
Si te empeñas en usar un Data StepMERGE y tienes más de 50 variables que renombrar, la solución es generar la lista RENAME=(...) dinámicamente mediante una Macro.
El principio es el siguiente:
Leer los metadatos de la tabla BETA (a través de PROC CONTENTS o las vistas de diccionario).
Construir una cadena de caracteres: X=X_Beta Y=Y_Beta ....
Inyectar esta cadena en el código.
%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;
Die auf WeAreCAS.eu bereitgestellten Codes und Beispiele dienen Lehrzwecken. Es ist zwingend erforderlich, sie nicht blind in Ihre Produktionsumgebungen zu kopieren. Der beste Ansatz besteht darin, die Logik zu verstehen, bevor sie angewendet wird. Wir empfehlen dringend, diese Skripte in einer Testumgebung (Sandbox/Dev) zu testen. WeAreCAS übernimmt keine Verantwortung für mögliche Auswirkungen oder Datenverluste auf Ihren Systemen.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.