sas - symputx 不允许我使用相同的宏函数存储不同的宏变量
问题描述
我正在尝试编写一个宏函数,该函数从数据集中获取属性,然后将它们存储为宏变量。我想以这样一种方式编写这个宏函数,它可以用于多个数据集和多个宏变量。
这有什么问题:
%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如果你需要那个宏,你的整个过程可能会搞砸。
推荐阅读
- python - 在多索引熊猫数据框中添加丢失的索引
- javascript - 如何修复检查相同随机数组值的函数
- linux - 如何匹配来自两个目录的部分匹配文件名并在找到的内容上执行命令
- javascript - 如何防止多个http请求同时触发
- python - 如何在 django 的重定向请求中传入模型
- conda - 如何在没有互联网连接的服务器上“conda install”?
- ruby-on-rails - 如何同时使用活动记录更新列?
- typescript - 如何通过 Ionic 4 选项卡按钮传递参数
- postgresql - 在 psql shell 中所做的更改不会显示在 Datagrip 会话中
- java - 当试图创建一个倒置的 Mandelbrot-set 时,它会被扭曲