我有一个名为fileName的宏变量。我试图在proc sql中使用它,它通过ODBC连接到Access数据库。但是,我所拥有的代码有错误或无法识别宏变量。
这是我的代码:
%let fileName=MYFILE.NAME
proc sql;
connect to odbc ("DSN=MS Access Database;"||
"DBQ=&dbname;"||
"FIL=MS Access;" ||
"MaxBufferSize=512;" ||
"PageTimeout=600;" ||
"UID=admin");
create table t1 as
select * from connection to odbc
(SELECT * FROM tableA
where FileName='&fileName');
quit;
返回0行。如果我用查询中的实际值替换宏变量,它将返回包含正确数据的1行。
如果我在& fileName周围使用双引号,我会收到以下错误: 错误:CLI描述错误:[Microsoft] [ODBC Microsoft Access驱动程序]''不是有效的名称。确保它没有 包括无效字符或标点符号,并且不会太长。
有谁能告诉我应该如何将宏变量传递给查询?感谢。
答案 0 :(得分:1)
外部DBMS不像SAS那样处理单引号和双引号:双引号包含变量名,而单引号包含字符串 - 您不能使用双引号来解析宏并将此结果用作i中的字符串; e。一个where子句。 你应该编码
%let schema = SCOTT; owner =%unquote(%str(%'& schema%'))
答案 1 :(得分:0)
如果要解析宏变量,则需要确保它不包含在单引号内。这一行:
where FileName='&fileName');
......需要:
where FileName="&fileName");
答案 2 :(得分:0)
尝试条带化前导和尾随空格,因为它们是由输入缓冲区创建的。
where FileName = "%sysfunc(strip(&fileName))" );