如何解决如何在SAS中的哈希表中使用%let宏
我正在更新使用哈希表的程序。该程序有很多重复的变量,这些变量会定期更改。 我一直在更新它们,以引用包含这些变量的宏代码的程序,因此我们不必一一更改它们,并且在所有其他项目中它的作用一直很吸引人,但我一直在努力解决这些哈希问题桌子 例如
%let year = x2020;
data acute &year.;
if 0 then set a_&syear.;
if _n_=1 then do;
declare has Tx(dataset:"Ty");
Tx.defineData("city","&year.");
Tx.define();
call missing(city,&year.);
end;
....
run;
我将其范围缩小到&year的使用。在Tx.defineData行中。 似乎没有在引号中选择宏,并且收到此错误:
未声明的数据符号&year。对于有对象
尽管我通常对引号内的宏没有问题。
我尝试将let函数更改为%let year = "x2020";
并在不需要引号的区域中使用dequote()
,也尝试使用quote(&year.)
而不是获取
未声明的数据符号“。用于哈希对象...。
在这种情况下,有没有人找到一种使用let宏的方法?
解决方法
您的主要问题是,
您正在尝试使用以数字开头的数据集和字段的名称。 SAS中的名称应以字母或下划线开头,并且只能包含字母,下划线和数字。如果没有,应该用不同的方式写。
- 编写
"name with blanks"n
以创建名为name with blanks
的变量或数据集 - 编写
"1_2_3"n
以创建名为name with blanks
的变量或数据集
现在可以,但是我建议您不要这样做,因为语法变得非常复杂。
您的代码不完整,包含很多错字。
因此,我不得不猜测您实际上想做什么。 如果您为我们剪切并粘贴日志,或者最好剪切并粘贴日志,这将有所帮助,以便我们确切地知道您的工作。
数据步骤
我假设使用data acute &year.;
,您只想创建一个名为acute 2020
的数据集。如果是这样,您应该写data "acute &year."n;
,但实际上我建议您重命名数据集并写data acute_&year.;
。
您可能还想在一个数据步骤中创建数据集acute
和2020
。那你应该写data acute "&year"n.;
哈希表的声明
首先,它不是declare has
,而是declare hash
,而不是Tx.define();
,而是Tx.defineDONE();
。
如果使用Tx.defineData("city","&year.");
指定字段city
和2020
用作数据,那应该起作用,因为在这里您将变量名指定为字符串,而不是SAS名称
错误实际上在call missing(city,&year.);
中,在这里您应该使用特殊语法call missing(city,"&year."n);
同样,我建议您将变量重命名为_2020,这样您就可以将其写为_&year.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。