簡體   English   中英

從SAS中的宏調用宏

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM