2017-03-01 117 views
0

中的半單引號; 這給了我結果:[email protected]; [email protected]; [email protected] 這就是我想要的。這是一個名爲&電子郵件的宏變量。我需要在任何兩封電子郵件之間使用分號,但在最後一封電子郵件後沒有分號 但對於在她的電子郵件地址中使用單引號(例如O'Connor)的人, %str會自動使用%STR(單位:%)單引號 。 [email protected]; [email protected]; lily.O'[email protected])將導致錯誤。 我怎樣才能得到結果[email protected]; [email protected]; lily.O'[email protected] 通過%str或任何其他宏引用函數,如%bquote或任何其他否則保持單引號無法匹配?當使用%STR([email protected]; [email protected]; [email protected])時,sas%str或%bquote希望保留宏變量

的EMAIL列表從Excel列表導入和Excel文件中的單引號之前,我已經把%:lily.O%'[email protected] ,我怎樣才能獲得宏變量&電子郵件。值內的%str(),即: [email protected]; [email protected]; lily.O%'[email protected] 然後我可以把宏變量放入%str )?

回答

0

對於%STR,您需要使用%符號標記不匹配的引號。因此,嘗試:

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

嗨,這個電子郵件列表是一個宏變量。它是excel中的一個列表,並在SAS中導入。我在excel中的單引號之前添加了這個%,並且我從excel表導入了電子郵件列表。 –

+0

請擴展您的問題以顯示您正在收到的錯誤(以及您正在運行哪些代碼以獲取錯誤)。 %STR()應該足以掩蓋單引號,但取決於您如何使用它,您可能會刪除宏引用或在錯誤的時間引用。簡單的例子'%let emaillist =%STR([email protected]; [email protected]; lily.O%'[email protected]);'工作正常 – Quentin

1

如果在宏變量有值已經從通過CALL SYMPUTX()函數調用或PROC SQL通過INTO子句的數據步說,那麼你可以使用%SUPERQ()微距功能,微距報價的價值。

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

如果該值已經處於宏觀變量的%BQUOTE()功能也將正常工作。

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

你甚至可以使用RESOLVE()函數來調用%SUPERQ()獲得與宏創建後立即引用重新定義了宏變量。因此,如果您的數據集MYTABLE的變量爲EMAIL_LIST,則可以使用類似代碼從數據生成一系列單獨的宏變量(list1,list2等)。由於在外部的字符串文字用雙引號

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; 

第一個示例數據步驟的工作,從而保護了非平衡單引號。通過使用%QSYSFUNC()宏函數調用DEQUOTE()函數,可以在宏代碼中執行相同的操作。請注意,如果值包含雙引號字符,則會遇到問題。他們需要被轉換成兩個相鄰的雙引號。

%put Email list = %qsysfunc(dequote("O'[email protected]")); 
相關問題