我想通过调用这个宏获得一个字符,但是在运行以下代码时给出错误:
%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;*/