【发布时间】:2019-12-11 19:43:24
【问题描述】:
我正在尝试编写一个宏函数,该函数从数据集中获取属性,然后将它们存储为宏变量。我想把这个宏函数写成可以用于多个数据集和多个宏变量的方式。
这是怎么回事:
%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 是否有禁止传入代表宏变量名称的宏变量的规则?
【问题讨论】:
-
你能说明你如何调用宏吗? storage_var 等于什么值?我认为,您应该使用 call symputx(“&storage_var.”,”&var_name”,”G”)
-
如果您存储在宏变量中的值是一个长度超过 262 个字符的字符串,您始终可以使用选项 NOQUOTELENMAX;抑制警告。您可以使用超过 262 个字符的字符串,但 SAS 会警告您,因为较长的字符串有时是不平衡引号的结果。