[英]Call a macro from a macro in SAS
我正在嘗試使用此宏來運行代碼的不同部分。 當我自己選擇並運行%if語句時,它們會起作用。 但是,當我嘗試運行%begin宏時,SAS EG會立即告訴我程序已完成且沒有錯誤。 但是,我的代碼都沒有運行。 這使我相信我有語法錯誤。 有人知道發生了什么嗎?
%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;
謝謝您的幫助!
僅憑您提供的信息,我的猜測是錯誤在這里:
%if &run_LCE. = >>"Y"<< %then %do;
&run_LCE.
是什么&run_LCE.
包含? Y
"Y"
還是"Y"
? 宏變量不是“字符”變量,因此除非引號實際上是變量內容的一部分,否則不使用引號。 通常,我在宏變量中只有Y
,因此您需要
%if &run_LCE. = Y %then %do;
您可以通過打開mlogic
選項( options mlogic;
)來驗證%if
是否失敗,該選項將使用宏語言將每個邏輯比較的結果打印到日志中。
您的環境中可能會發生某些錯誤,導致宏未正確結束。 我可以在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會話。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.