我需要将包含空格的变量传递给宏。并使用此变量制作一些逻辑并在宏内部建立一个新列。
我尝试过类似的事情:
%MACRO func(var);
if first.id then &var = 0;
retain &var;
if descr = %unquote(%str(%'&var%')) then &var = 1;
%MEND;
proc sort data=work.table5a;
by id;
run;
data temp;
set work.table5a;
by id;
%func(PLUTO)
%func(PAPERINO)
%func(BANDA BASSOTTI)
if last.id;
run;
错误是:
注意:由宏变量" VAR"生成的行。 37 BANDA BASSOTTI _____ 180 错误180-322:声明无效或使用不正确。
如果我对%prova(BANDA BASSOTTI)发表评论,那就有效了。有什么建议吗?
感谢
答案 0 :(得分:2)
您正在使用& var来创建变量名称,如果您想要一个包含空格的变量名称,则需要使用变量名称文字,例如: “BANDA BASSOTTI”我自己没有这样做,似乎它使代码变得更加丑陋和更难写,但这样的东西似乎有效:
options validvarname=any;
%MACRO func(var);
retain "&var"n;
if first.id then "&var"n = 0;
if descr = "&var" then "&var"n = 1;
%MEND;