Sas 使用SYMGETN指定在%DO语句中循环的次数

Sas 使用SYMGETN指定在%DO语句中循环的次数,sas,Sas,我试图将变量值从数据集传递到宏,并在do循环中使用它 data work.b; set work.a; if _N_ = 1 then call symput('foo', foo_var); run; %macro bar(max_loop_count); %do i = 1 %to &max_loop_count; * Some data steps here ; %end; %mend; %bar(symgetn('foo'

我试图将变量值从数据集传递到宏,并在
do
循环中使用它

data work.b;
    set work.a;

    if _N_ = 1 then call symput('foo', foo_var);
run;

%macro bar(max_loop_count);
    %do i = 1 %to &max_loop_count;

        * Some data steps here ;

    %end;
%mend;

%bar(symgetn('foo'));
但是,我遇到了以下错误:

ERROR: Required operator not found in expression: &max_loop_count 
ERROR: The %TO value of the %DO I loop is invalid.
ERROR: The macro BAR will stop executing.

我在这里做错了什么?

您的宏调用将导致
%DO
循环具有此上限
symgetn('foo')
。您不能在宏代码中使用
SYMGETN()
,因为它是一个数据步函数,这就是为什么会出现上限不是数字的错误

只需在宏调用中传递宏变量的值

%bar(&foo);

宏调用将导致
%DO
循环具有此上限
symgetn('foo')
。您不能在宏代码中使用
SYMGETN()
,因为它是一个数据步函数,这就是为什么会出现上限不是数字的错误

只需在宏调用中传递宏变量的值

%bar(&foo);

在macrocall中使用symgetn而不是&foo是否有特定的原因?在第2页的顶部,它说:“相反,SYMGET是一个SAS语言函数,它在数据步骤执行期间将宏变量的值返回给数据步骤。”我猜想symgetn函数只用于在数据步骤内执行,因此不能在宏调用中使用它。但是我不能用更多的引用来备份它,所以我只把它作为注释发布。在macrocall中使用symgetn而不是&foo有什么特别的原因吗?在第2页的顶部,它说:“相反,SYMGET是一个SAS语言函数,它在数据步骤执行期间将宏变量的值返回给数据步骤。”我猜想symgetn函数只用于在数据步骤内执行,因此不能在宏调用中使用它。但是我不能用更多的参考资料来备份这篇文章,所以我只把它作为评论发布。是的,这是正确的答案。真不敢相信我错过了。是的,这是正确的答案。真不敢相信我错过了。