SAS:宏变量和字符串。正确的表名

Posted

技术标签:

【中文标题】SAS:宏变量和字符串。正确的表名【英文标题】:SAS: Macro variable and string. Correct TableName 【发布时间】:2012-05-21 21:43:16 【问题描述】:

这是宏的一部分:

  %let mvTableName = "MyTable";

  proc append base = &mvTableName data = TEMP_TABLE;
  run;

我在 WORK 中找不到表:\

之后我检查表的创建。

  data &mvTableName; 
  run;

并在日志中查看:Dataset MyTable ...

但是当我更改字符串%let mvTableName=MyTable;

我看到了这个日志:Dataset WORK.MyTable ..

如何解释?

【问题讨论】:

【参考方案1】:

如果您要使用 mvTableName 作为 DATA= 选项的输入,请不要包含双引号

假设 MyTable 和 Temp_table 是 WORK 库中的 SAS 数据集...这应该可以。

%Let mvTableName=MyTable;
Proc Append base=&mvTableName data=temp_table;
run;

还有,

Data &mvTableName;
Run;

创建一个空数据集...所以 mvTableName 将被一个空数据集覆盖。

【讨论】:

在宏变量赋值中从 = 到 ;分配给宏变量...与不包含引号的数据步骤变量分配不同。引号包含在 BASE= 语句中……这是不正确的。在宏变量赋值中使用引号是很少见的(有人会说它不应该发生)。如果您需要在语句中使用引号......只需包装宏 var。请务必使用双引号,否则宏变量将无法解析。

以上是关于SAS:宏变量和字符串。正确的表名的主要内容,如果未能解决你的问题,请参考以下文章

SAS中的宏变量开头和结尾分别是啥命令?

为啥 MariaDB 不接受我的字符串变量作为我的 sql 查询中的表名?

在宏内部使用变量内部数据集名称时,SAS语法错误22和200

SAS中如何分组计数,并将值保存到宏变量

基于宏变量的 SAS 子集

使用文件中的代码作为 SAS 宏变量的内容