为什么这个if语句不工作在sas宏?



我想通过调用这个宏获得一个字符,但是在运行以下代码时给出错误:

%macro getcategory(date=);
%global category;
%if %year(date) < 2002 %then %do;
%let category = A;
%mend;
%getcategory(date=1999);

我试过symput,但是没有用。

请使用运行代码时获得的错误消息更新您的问题。同时,以下是我发现的一些问题:

  • %year不是SAS/Macro函数
  • 如果%year是一个函数,在date上运行它而不使用&号将简单地尝试在文字'date'上运行它
  • 您已打开%do块,但尚未以%end结束
  • 您提供了一个编号日期,因此不需要使用
  • 函数将其转换为年份。

当你传递一个小于2022的数字时,这段代码应该将宏变量category设置为A的值-希望这段功能代码将帮助你实现你希望实现的目标:

%macro getcategory(date=);
%global category;
%if %eval(&date < 2002) %then %do;
%let category = A;
%end;
%mend;
%getcategory(date=1999);
/* Added a %put statement to return the value of category */
%put &category;

如果您正在努力使用SAS宏,您可以打开这些选项来帮助:

OPTIONS MPRINT MLOGIC SYMBOLGEN;
/*off: OPTIONS NOMPRINT NOMLOGIC NOSYMBOLGEN;*/