2017-03-01 2 views
0

behalten, wenn% STR verwendet wird ([email protected]; [email protected]; [email protected]); Das gibt mir das Ergebnis: [email protected]; [email protected]; [email protected] was ich will. und dies ist eine Makrovariable namens & E-Mail. Ich brauche dieses Semikolon zwischen zwei beliebigen E-Mails, aber kein Semikolon nach der letzten E-Mail Aber für jemanden, der ein einfaches Zitat in ihrer E-Mail-Adresse wie O'Connor hat, % str wird automatisch das einfache Zitat mit% STR (amy. [email protected]; [email protected]; lily.O'[email protected]) wird einen Fehler verursachen. Wie kann ich das Ergebnis [email protected]; [email protected]; lily.O'[email protected] mit% str oder einer anderen Makro-Zitat-Funktion wie% bquote oder irgendetwas erhalten sonst, um dieses einzige Zitat unübertroffen zu halten?sas% str oder% bquote möchten das halbe einfache Anführungszeichen innerhalb der Makrovariablen

die E-Mail Liste wird von Excel-Liste importiert und ich schon% vor dem Apostroph in der Excel-Datei setzen: lily.O%'[email protected] und wie kann ich die die Makrovariable & E-Mail erhalten. Wert innerhalb der% str(), nämlich: [email protected]; [email protected]; lily.O%'[email protected] dann kann ich Makro-Variable in% str setzen ()

Antwort

0

Mit% STR müssen Sie nicht übereinstimmende Anführungszeichen mit einem% -Zeichen markieren. So versuchen:

%STR([email protected];[email protected];lily.O%'[email protected]) 
+0

Hallo, diese E-Mail-Liste ist eine Makrovariable. Es war eine Liste im Excel und importiert in SAS. Ich habe dieses% vor dem einfachen Anführungszeichen im Excel hinzugefügt und die E-Mail-Liste aus dem Excel-Blatt importiert. –

+0

Bitte erweitern Sie Ihre Frage, um anzuzeigen, welchen Fehler Sie erhalten (und welchen Code Sie ausführen, um den Fehler zu erhalten). % STR() sollte ausreichen, um ein einzelnes Anführungszeichen zu maskieren, aber abhängig davon, wie Sie es verwenden, entfernen Sie möglicherweise die Makro-Anführungszeichen oder zitieren zur falschen Zeit. Das einfache Beispiel '% let emaillist =% STR ([email protected]; [email protected]; lily.O% '[email protected]);' funktioniert gut – Quentin

1

Wenn Sie den Wert bereits in einer Makrovariablen haben, sagen wir von einem Daten Schritt über CALL SYMPUTX() Funktionsaufruf oder von PROC SQL über INTO-Klausel, dann können Sie %SUPERQ() Makrofunktion Makro Zitat verwenden Sie den Wert .

data _null_; 
    call symputx('unquoted',"O'[email protected]"); 
run; 
%put Email list = %superq(unquoted); 

Wenn der Wert bereits in einem Makro-Variable ist, würde das die %BQUOTE() Funktion auch funktionieren.

%put Email list = %bquote(&unquoted); 

Sie könnten sogar die RESOLVE() Funktion %SUPERQ() rufen Sie die Makrovariable mit Makro nach dem Erstellen zitiert sofort neu definiert zu erhalten. Wenn Sie also eine Datenmenge MYTABLE mit einer Variablen EMAIL_LIST haben, könnten Sie eine Reihe von separaten Makrovariablen (list1, list2, usw.) aus den Daten generieren, indem Sie einen solchen Code verwenden.

data _null_; 
    set mytable ; 
    length mvar rc $32 ; 
    mvar = cats('list',_n_); 
    call symputx(mvar,email_list); 
    rc = resolve(catx(' ','%let',mvar,'=%superq(',mvar,');')); 
run; 

Das erste Beispiel Daten Schritt funktioniert, da die Stringliteral gebrauchte doppelte Anführungszeichen auf der Außenseite und damit die unsymmetrischen Apostroph geschützt. Sie könnten dasselbe in Makrocode tun, indem Sie die %QSYSFUNC() Makrofunktion verwenden, um die DEQUOTE()-Funktion aufzurufen. Beachten Sie, dass Sie Schwierigkeiten haben würden, wenn der Wert doppelte Anführungszeichen enthält. Sie müssten in zwei benachbarte doppelte Anführungszeichen konvertiert werden.

%put Email list = %qsysfunc(dequote("O'[email protected]")); 
Verwandte Themen