SAS 9.3 将带空格的变量传递给宏

SAS 9.3 passing a variable with spaces to a macro

我需要将包含空格的变量传递给宏。并使用这个变量来制作一些逻辑并在宏中建立一个新列。

我试过类似的方法:

%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班达巴索蒂 _____ 180 错误 180-322:语句无效或使用顺序不正确。

如果我评论 %prova(BANDA BASSOTTI) 它有效。有什么建议吗?

谢谢

您正在使用 &var 创建一个变量名,如果您想要一个包含空格的变量名,您需要使用变量名文字,例如"BANDA BASSOTTI"n。我自己没有这样做过,似乎它使代码更丑陋且更难编写,但这样的事情似乎有效:

options validvarname=any;

%MACRO func(var);
    retain "&var"n;
    if first.id then "&var"n = 0;
    if descr = "&var" then "&var"n = 1;
%MEND;