2015-06-19 122 views
2

我有一段代碼的下面簡化版本,我的工作:這些宏參數有什麼問題?

%macro test(var); 

%if &var = 'Sub Prime' %then %do; 
%let var2 = 'Sub_Prime'; 
%put &var2; 
%end; 
%mend; 

%test(Sub%str()Prime); 

基本上這樣做的問題是,如果VAR =「次貸」是VAR2應該=「Sub_Prime」。看起來雖然這個var不等於'Sub Prime'。誰能告訴我我做錯了什麼?

謝謝

回答

3

宏變量不使用引號。

%macro test(var); 

%if &var = %str(Sub Prime) %then %do; 
    %let var2 = Sub_Prime; 
    %put &=var2; 
%end; 
%mend; 

%test(Sub%str()Prime); 

你會更好使用%str圍繞整個事情,雖然,而不是插入在剛剛空間%力量。

%test(%str(Sub Prime)); 
+0

工作很好,謝謝。我不能接受你的答案,但是,謝謝。 – gdogg371

+2

@ gdogg371當您沒有得到預期的結果時,測試宏的一個好方法是將表達式打印到日誌中。 IE瀏覽器。從原始問題'&var ='Sub Prime''中取出一些代碼,然後在它前面做一個'%put'。 '%put&var ='子總理';'。很快你會意識到沒有引號的字符串不等於帶引號的字符串。 –

+0

它在我看來應該不需要在這裏使用%str()。是嗎?唯一可以屏蔽的字符是空白的,但爲什麼需要屏蔽? (我遠離SAS,所以不能嘗試。) – Quentin