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) ...
- Anmelden oder Registrieren um Kommentare zu schreiben

Wie man unpaarige/unmatched Hochkommas entfernen kann
Hallo,
unpaarige Gänsefüßchen kann man so entfernen:
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.
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