解析远程PROC SQL(SAS)中的宏引用

  • 本文关键字:引用 SAS PROC SQL sql sas proc
  • 更新时间 :
  • 英文 :


我在远程会话中引用变量时遇到了很多麻烦。

我试图实现的是一个动态日期查询。此时,脚本可以很好地使用静态WHERE语句。然而,我试图引用宏变量的所有内容,都以某种方式失败了。

这项工作:

WHERE SDD LIKE '2018-09%'

但事实并非如此:

WHERE SDD LIKE '2018-"&monthn."%'
or
WHERE SDD LIKE '2018-"monthn"%'
or
WHERE SDD LIKE %str(%')2018-&monthn.%str(%')

感谢所有建议


这或多或少是所有相关代码:

*-------------------------------------------------------------------;
* LOGIN TO zOS                                                      ;
*-------------------------------------------------------------------;
%let    zos =   ********;
signon  zos     userid=&userid. password=&passw.;
*-------------------------------------------------------------------;
* PREPARE LOCAL VARIABLES FOR TRANSFER TO REMOTE                    ;
*-------------------------------------------------------------------;
%SYSLPUT MONTHN =   &monthn;    /* MONTHN = 11 */
*-------------------------------------------------------------------;
* OPEN CONNECTION, DOWNLOAD FLIGHTS, CLOSE CONNECTION AND SIGNOFF   ;
*-------------------------------------------------------------------;
rsubmit;        /* REMOTE COMPUTING START */
%PUT &MONTHN;       /* GET LOCAL VARIABLES */
----
Many lines of settings up the 
wintel/sql connection
----
%SYSLPUT MONTHN =   &monthn;
rsubmit;
%PUT &MONTHN;       /* GET LOCAL VARIABLES */
proc sql dquote=sas;
create table TKLM1WINTEL as
SELECT *
FROM   tables
WHERE SDD LIKE '2018-"&monthn."%'
/* WHERE SDD LIKE '2018-09%' */
PROC download data=TKLM1WINTEL out=DBFILE;
RUN;
endrsubmit;
endrsubmit;     /* REMOTE COMPUTING END */
signoff;

好吧,我只是在这个来源的帮助下自己想出来的。

正确的WHERE语句如下:

WHERE SDD LIKE %unquote(%str(%')2018-&monthn.%%str(%'))

这样的东西应该可以工作。

data abc;
input id sdd $8.;
datalines;
1 2018-091
2 2018-081
;
%let month =09;
proc sql;
select * from abc
where sdd like "2018-&month.%";

相关内容

  • 没有找到相关文章

最新更新