Gibt es eine magische "Auto-Rename"-Option? Nein, nicht nativ im Data Step. Aber hier sind die drei Lösungen, die Experten vorschlagen, um diese lästige Aufgabe zu umgehen.
1. Die SQL-Lösung: Verwendung von Aliasen
Dies ist oft die sauberste Alternative. Im Gegensatz zum Data Step ermöglicht PROC SQL die Manipulation von zwei Spalten mit demselben Namen, indem sie mit ihrer Ursprungstabelle (Alias) präfigiert werden.
Sie müssen die Variablen nicht vor der Berechnung umbenennen, Sie tun es im laufenden Betrieb.
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;
Vorteil: Besser lesbarer Code und direkte mathematische Logik.
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. Die "Hacker"-Lösung: Dynamisches Makro
Wenn Sie unbedingt einen Data StepMERGE verwenden möchten und 100 Variablen umbenennen müssen, besteht die Lösung darin, die Liste RENAME=(...) dynamisch über ein Makro zu generieren.
Das Prinzip ist wie folgt:
Lesen Sie die Metadaten der BETA-Tabelle (über PROC CONTENTS oder die Dictionary-Views).
Erstellen Sie eine Zeichenkette: X=X_Beta Y=Y_Beta ....
Fügen Sie diese Zeichenkette in den Code ein.
%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.