[英]SAS Macro Statement %If and %Let
我正在嘗試解決一個問題,在該問題中,它會根據某些條件為您分配一個帶有 let function 的參數。對於本練習,我在代碼中使用 %if 和 %let 條件。 到目前為止,我以簡化方式編寫的代碼如下:
%let anio = 2022;
%let base = 2;
%Macro Data;
%if &anio = 2022 %then %do;
%Let year_add = %Str(&Base.C);
%Let year_add1 = %Str(&Base.B);
%mend;
%Data;
%put &=year_add;
%put &=year_add1;
問題是顯然宏沒有在第二個 let 語句中為我分配任何值
第一個 %put = &year_add 給了我正確的結果 2C。
不幸的是,第二個 %put = &year_add1 出現以下消息:apparent symbolic referenc yeard_add1 not resolved
任何人都可以幫助我或建議我如何根據條件分配不同的 let 語句嗎?
提前致謝。
您的宏定義缺少 %DO 的 %END。
%macro data;
%if &anio = 2022 %then %do;
%let year_add = &Base.C;
%let year_add1 = &Base.B;
%end;
%mend;
如果目標宏變量 YEAR_ADD 和 YEAR_ADD1 尚不存在,那么您的宏將創建它們作為 DATA 宏的本地變量。 因此,一旦宏完成,它們將被刪除。
最簡單的解決方案是在調用宏之前確保宏變量存在。
%let anio = 2022;
%let base = 2;
%let year_add=;
%let year_add1=
%data;
%put &=year_add;
%put &=year_add1;
如果您確定宏變量不存在於其他調用 %DATA() 的宏中,那么您可以添加一個 %GLOBAL 語句以在 GLOBAL 宏 scope 中定義它們,這樣當宏完成時它們將不會被刪除這對宏定義:
%global year_add year_add1 ;
但是如果它們被定義為本地到其他一些調用 %DATA 的宏,那將產生一個錯誤。 因此,為了安全起見,如果它們尚不存在,則只將它們強制放入 GLOBAL scope 中。
%if not %symexist(year_add) %then %global year_add;
%if not %symexist(year_add1) %then %global year_add1;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.