Quoting
Verfasst von Wolfgang Hornung am 1 März, 2010 - 15:35
Hallo zusammen,
ich möchte eine Makrovariable an einen SQL-PassThrough nach Oracle weiterreichen und in einem LIKE-Operator
verwenden.
a like "%&macvar.%"
mag Oracle nicht wegen der "-Zeichen: Invalid Identifier...
Mit
a like %bquote('&name_arzt.')
funktioniert das soweit, nur wie bekomme ich die
Platzhalter % für den LIKE-Operator wieder rein?
Mit
a like %bquote('%&name_arzt.%')
meckert SAS berechtigt, dass da entsprechende Macro "Inhalt von macvar"
nicht gefunden wir, das bquote nur während der Ausführungsphase maskiert. Bleiben also eigentlich nur noch %str oder %nrstr übrig,
damit bin ich leider auch nicht weitergekommen.
Wäre super, wenn jemand hier im Forum eine Idee hätte.
Vielen Dank und viele Grüße
Wolfgang Hornung
»
- Anmelden oder Registrieren um Kommentare zu schreiben

Hochkommas und Prozentzeichen getrennt maskieren
Hallo Herr Hornung,
ich sehe wie Herr Kneillmann eine Lösung darin, der Macrovariable die Sonderzeichen per call symput(...) hinzuzufügen.
Eine andere Möglichkeit ist die getrennte Behandlung der Hochkommas und Prozentzeichen. Dabei muss man nicht einen Datastep vorher durchführen.
Data test;
a="Der Tester";
run;
Data Test1;
set test;
where a like %UNQUOTE(%BQUOTE(')%NRSTR(%%)&macVar%%BQUOTE('));
run;
/* oder */
Data _NULL_;
call symput("MacVar1",STRIP(cats("'%","&MacVar.","%'")));
run;
Data Test1;
set test;
where a like &macVar1.;
run;
*Beides führt zu
NOTE: There were 1 observations read from the data set WORK.TEST.
WHERE a like '%Test%';
Ich hoffe, dass hilft Ihnen weiter.
Schöne Grüße
Jan
So geht es auch...
Hallo Jan,
so geht es auch, so kann ich es auch 1zu1 in den PassThrough übernehmen.
Vielen Dank und viele Grüße
Wolfgang
Prozent durchreichen
Hallo Herr Hornung,
wenn ich das Prozent-Zeichen in eine Macro-Variable hineinzaubern will, dann mache ich das so:
%put INFO: macvar1=&macvar1.;
data _null_;
macvar1='%'||"&macvar1."||'%';
put macvar1=;
call symput("macvar2", macvar1); /* Variante 1 */
call symput("macvar3", '%'||"&macvar1."||'%'); /* Variante 2 */
run;
%*ut INFO: macvar2=%bquote(&macvar2.); /* liefert WARNING: Apparent invocation of macro XYZ not resolved. */
%put INFO: macvar2=%superQ(macvar2);
%put INFO: macvar3=%superQ(macvar3);
Zu dem eigentlichen Problem mit dem Prozentzeichen vor/hinter dem Suchmuster:
Beim Data Step
likehabe ich auch schon mal mit %% gearbeitet:%let muster2=Kneilmann;
%let muster3=;
data aaa;
set dm3_lib.kundname(obs=9999 keep=kundnum name1);
where upcase(name1) like upcase("%%&muster1.%%&muster2.%%&muster3.%%");
run;
Vielleicht hilft es ...
Gruß
Hans Kneilmann, Schäfer Shop GmbH (SSI)
So funktioniert es...
Hallo Herr Kneilmann,
mit dem Trick über den DataNull-Step funktioniert das ganze. Oracle nimmt das auch brav an,
wenn ich dann %bquote(&macvar3.) im PassThrough verwende.
Der Interesse halber: Fällt jemandem im Forum noch eine direkte Lösung ein (ohne DataNull)?
Vielen Dank für Ihre Hilfe und viele Grüße
Wolfgang Hornung