Eine Kombination von regulären Ausdrücken und eine DO-Schleife kann das erreichen.
Schritt 1: in der folgenden Art und Weise eine Umwandlungstabelle
Akzentuiert Buchstaben bauen, die mit demselben Ersetzungszeichen lösen sind auf einer einzigen Zeile setzen, durch die getrennt | Symbol.
data conversions;
infile datalines dsd;
input orig $ repl $;
datalines;
ç,c
ğ,g
ı,l
ö|ò|ó,o
ë|è,e
;
Schritt 2: Shop Original-und Ersatz-Strings in Makrovariablen
proc sql noprint;
select orig, repl, count(*)
into :orig separated by ";",
:repl separated by ";",
:nrepl
from conversions;
quit;
Schritt 3: Führen Sie die eigentliche Umwandlung
Nur um zu zeigen, wie es funktioniert, lassen sie mit nur einer Spalte umgehen.
data convert(drop=i re);
myString = "ç ğı òö ë, è";
do i = 1 to &nrepl;
re = prxparse("s/" || scan("&orig",i,";") || "/" || scan("&repl",i,";") || "/");
myString = prxchange(re,-1,myString);
end;
run;
myString
Resultierende: "c gl oo e, e"
alle Zeichenspalten zu verarbeiten, verwenden wir ein Array
Sagen Sie Ihre Tabelle mySource
benannt ist und Sie alle Zeichen zu verarbeitende Variablen; Wir werden dafür einen Vektor namens cols
erstellen.
data convert(drop=i re);
set mySource;
array cols(*) _character_;
do c = 1 to dim(cols);
do i = 1 to &nrepl;
re = prxparse("s/" || scan("&orig",i,";") || "/" || scan("&repl",i,";") || "/");
cols(c) = prxchange(re,-1,cols(c));
end;
end;
run;
Wie viele Zeilen in Ihrer Tabelle? –
fast 100K aber manchmal könnte es mehr als eine Million Zeilen sein –