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

时间:2016-05-13 17:36:22

标签: sas sas-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 BANDA BASSOTTI             _____             180 错误180-322:声明无效或使用不正确。

如果我对%prova(BANDA BASSOTTI)发表评论,那就有效了。有什么建议吗?

感谢

1 个答案:

答案 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;