symputx 不允许我用相同的宏函数存储不同的宏变量

symputx won't let me store different macro variables with the same macro function

我正在尝试编写一个宏函数,从数据集中获取属性,然后将它们存储为宏变量。我想以这样的方式编写这个宏函数,它可以用于多个数据集和多个宏变量。

这有什么问题:

%macro ExtractACell(dataset, storage_var, rownum=1, var_name=Make);
data _null_;
    set &dataset. (obs=&rownum. firstobs=&rownum. keep = &var_name.);   
    call symputx(&storage_var., &var_name., "G");
    stop;
run;
%mend ExtractACell;

每当我尝试 运行 时,我都会收到这样的注释:

 NOTE: The quoted string currently being processed has become more than 262 bytes long.  You might have unbalanced quotation marks.
 NOTE: The quoted string currently being processed has become more than 262 bytes long.  You might have unbalanced quotation marks.
 27         %let SASWORKLOCATION="%sysfunc(getoption(work))/";

symputx是否有规则禁止传入代表宏变量名称的宏变量?

确保在扩展宏变量时生成有效的 SAS 代码。特别是这条语句:

call symputx(&storage_var., &var_name., "G");

将要求您调用宏,并在要创建的宏变量的名称周围加上引号。像这样:

%ExtractACell(dataset=sashelp.cars, storage_var="mymvar", rownum=1, var_name=Make);

使用此语句编写宏代码可能更简单。

call symputx("&storage_var", &var_name., "G");

那么你可以在宏变量名两边不带引号的情况下调用:

%ExtractACell(dataset=sashelp.cars, storage_var=mymvar, rownum=1, var_name=Make);

PS 如果您需要那个宏,您的整个过程可能会搞砸。