sas - 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
它有效。所以问题是在宏中使用此代码时。有谁知道这里会发生什么以及如何解决它?而且,只是为了好奇,为什么它以前有效?
谢谢你,真的!!
解决方案
可变范围。研究使用CALL SYMPUTX()
而不是CALL SYMPUT()
. 它以前可能有效,因为您在测试时全局创建了宏变量,而在这种情况下您没有。宏变量不存在于宏之外,除非您将它们创建为全局宏变量。
call symputx("&macvar", size, 'g');
推荐阅读
- excel - Excel:计算2列之间的平均时间(持续时间),有标准
- uinavigationcontroller - 使用 backindicatorimage 和 backindicatortransitionmaskimage 时,您必须同时指定 backindicatorimage 和 backindicatortransitionmaskimage
- wpf - 我们应该在 UI 线程中调用 OnPropertyChanged 吗?
- ssh - 在后台运行非交互式 ssh 命令立即挂起作业
- sql-server - 让 SQL Server 明白没有循环
- ios - 当我们的应用程序以 swift 运行时,检测在 iOS 设备屏幕上显示的推送通知
- machine-learning - CNN or RNN which one should i use?
- android-studio - 如何在 android TextView 中显示这个字符串是一种完美的方式
- c# - 传入字典的模型项的类型为“System.Data.Entity.Infrastructure.DbQuery”1
- r - 循环遍历列并在 R 中复制数据