Unpaarige (Unmatched) Hochkommas in einer Variable

Arbeite im EG mit den Parametern (Parameter-Manager). Muß dort einige auch als Zeichenkette definieren - sonst werden es zu viele. Im Eingabedialog (beim Ausführen) kann man dann beliebige Zeichen eingeben - z.B. auch unpaarige ' ...

Vor meinem Code kommt dann als generierter Code z.B. %let var = %NRSTR(#1 23 av cX N GH " ' 4);

Dies bereitet mir große Probleme: Habe auf alle erdenklichen Arten und Weisen versucht (mit den unterschiedlichsten Maskierungen) diese Zeichen zu entfernen bzw. nur die für mich gültigen Zeichen zu behalten. Hat nur nie funktioniert - sobald z.B. ein einzelnes ' in der Variable ist laufe ich immer auf Fehler. Ist auch beim ausprobieren sehr nervig da sich SAS intern auch etwas zerschießt und ich jedes Mal den EG schließen und erneut aufrufen muss - sonst erhalte ich nicht nachvollziehbare Ergebnisse.

Vielleicht hat jemand eine Idee wie man solch unpaarige/unmatched Hochkommas und Klammern trotz allem entfernen kann?

DANKE

P.S.: Daß es funktionieren würde wenn man ein einzelnes ' als %' angeben würde ist mir klar - habe aber leider keinen Einfluß auf den Variableninhalt (kommt von außen/vom Anwender) ...

Wie man unpaarige/unmatched Hochkommas entfernen kann

Hallo,
unpaarige Gänsefüßchen kann man so entfernen:

data _null_;
call symput("selbed", "Egon's Haus'"); /* Test-String, unfertig! */
run;
%put INFO: selbed=&selbed.; /* Zwischeninfo */
%let selbed=%Qsubstr(&selbed.,1,11); /* hier wird es unpaarig */
%put INFO: selbed=&selbed.; /* Test-String, fertig! */

%let selbedK=%Qsysfunc(kcompress(&selbed.,'"')); /* löscht ALLE Gänsefüßchen (egal welche) */
%put INFO: selbedK=&selbedK.;

Gruß
Hans Kneilmann, Schäfer Shop GmbH (SSI)

Parameter in Anführungszeichen übergeben

Hallo Walter,

im EG kann man im Parametermanager angeben, dass die Parameter in Anführungszeichen übergeben werden sollen. Hochkommas werden dann wie ganz normaler Text behandelt. Anführungszeichen innerhalb der Parameter werden gedoppelt.

/* Nutzer gibt z. B. &test"en ein
daraus macht der Parametermanager
*/
%LET PARAMETER = %NRSTR("&test""en");
/*
Um den Parameter ohne Anführungszeichen zu verwenden entfernst Du die einschließenden Anführungszeichen. Die Macrofunction %NRBQUOTE() brauchst Du, um das verbleibende einzelne Anführungszeichen und sonstige Sonderzeichen zu maskieren.
Die Funktion QSYSFUNC() brauchst Du, damit eventuell vorhandene & oder % maskiert werden.
*/
%LET PARAMETER=%NRBQUOTE(%QSYSFUNC(dequote(&PARAMETER.)));
/* Die anschließende Ausgabe zeigt: */
%PUT &PARAMETER.;
&test"en

Schöne Grüße

Jan

Hallo Jan, ganz großes

Hallo Jan,

ganz großes Kompliment: Genau das habe ich gesucht ...

Habe wirklich einiges probiert aber auf Deine (sogar recht simple) Lösung wäre ich nicht gekommen.

Herzlichen Dank

Schöne Grüße aus Bayern

Walter

P.S.: Für mich heißt das, daß ich zukünftig alle über Parameter frei eingebbaren Zeichenketten immer mit "Werte in Anführungszeichen" anlegen werde