2016-07-28 115 views
0

我想使用此宏來運行代碼的不同部分。當我自己選擇並運行%if語句時,它們可以工作。但是,當我嘗試運行%begin宏時,SAS EG立即告訴我程序已完成且沒有錯誤。但是,我的代碼沒有運行。這導致我相信我有一個語法錯誤。有誰知道發生了什麼事?從SAS宏調用宏

%macro begin(); 
%if &run_NLI_LTC. = "Y" %then %do; 
%MDI(1,NonLI_LTC); 
%compare(1); 
%end; 

%if &run_LCE. = "Y" %then %do; 
%MDI(2,LCE); 
%compare(2); 
%end; 
%mend begin; 
%begin; 

感謝您的幫助!

+0

你不能單獨運行%IF語句,它在開放代碼中不起作用。你必須在宏定義中嵌入宏邏輯如%IF並調用宏。 – Tom

+0

宏變量有什麼值?如果兩個條件均爲假,您的宏將不會執行任何操作。 – Tom

回答

0

您的環境中可能會出現某些宏未正常結束的情況。我可以在EG 7.1中無誤地運行以下內容。

%macro printit(s); 
%put &s; 
%mend; 

%macro begin(x); 
%if %sysevalf(&x > 0) %then %do; 
    %printit(x > 0); 
%end; 
%if %sysevalf(&x < 0) %then %do; 
    %printit(x > 0); 
%end; 
%if %sysevalf(&x = 0) %then %do; 
    %printit(x = 0); 
%end; 
%mend begin; 

%begin(1); 

嘗試重新連接到SAS(右鍵單擊活動服務器,並選擇「斷開」)並運行上述操作。

如果這樣的話,那麼你的代碼中可能會有一個未正確結束的宏。也就是說,SAS處於一種認爲它仍在編譯宏的狀態。它會不時發生,修復的最簡單方法是重新啓動SAS會話。

2

我的猜測,只有您提供的信息,是這個錯誤是在這裏:

%if &run_LCE. = >>"Y"<< %then %do; 

是什麼&run_LCE.包含哪些內容? Y"Y"?宏變量不是「字符」變量,所以不使用引號,除非它們實際上是變量內容的一部分。通常情況下,我會只在宏變量Y,所以你需要

%if &run_LCE. = Y %then %do; 

您可以驗證%if是通過打開mlogic選項(options mlogic;),這將打印到失敗的記錄每個邏輯的結果宏觀語言比較。