首页 > 解决方案 > SAS CALL SYMPUT 在宏内不起作用(在它之前)

问题描述

我需要将数据集中的行数存储在宏变量中。所以我用了这个:

%macro get_table_size(inset,macvar);
 data _null_;
  set &inset NOBS=size;
  call symput("&macvar",size);
 stop;
 run;
%mend;
%get_table_size(LOANTAPE.INSTRUMENT_VU21,NUM_REG_INS);
%put &NUM_REG_INS;

在我的计算机崩溃之前(必须在打开 SAS 的情况下强制它重新启动),这很有效(我发誓 xd)。但是现在,没有创建宏 NUM_REG_INS。日志说:明显的符号引用 MACVAR not resolved

因此,我将代码作为数据步骤而不是宏进行了检查,如下所示:

data _null_;
  set LOANTAPE.INSTRUMENT_VU21 NOBS=size;
  call symput("macvar",size);
 stop;
run;
 %put &macvar

它有效。所以问题是在宏中使用此代码时。有谁知道这里会发生什么以及如何解决它?而且,只是为了好奇,为什么它以前有效?

谢谢你,真的!!

标签: sassas-macro

解决方案


可变范围。研究使用CALL SYMPUTX()而不是CALL SYMPUT(). 它以前可能有效,因为您在测试时全局创建了宏变量,而在这种情况下您没有。宏变量不存在于宏之外,除非您将它们创建为全局宏变量。

call symputx("&macvar", size, 'g');

请参阅此处的文档


推荐阅读