使用一个查询的结果作为另一个查询的参数

Using the result of a query as a parameter for another query

我正在尝试将查询结果用作另一个查询的参数。

如下:

PROC SQL;
    SELECT mydate INTO : varmydate FROM work.MyTable WHERE codigo = 1234;
QUIT;
 
PROC SQL;
    SELECT * FROM work.MyOtherTable
    WHERE codata = &varmydate;
QUIT;

但是,不幸的是,这没有用。

在此示例中,varmydate 变量将在第一个查询中接收数据类型的值。

 96         PROC SQL;
 97             SELECT codata FORMAT date9., valor FROM work.MyOtherTable WHERE codata = &varmydate;
 NOTE: PROC SQL set option NOEXEC and will continue to check the syntax of statements.
 NOTE: Line generated by the macro variable "VARMYDATE".
 97          01MAR2020
               _______
               22
               76
 ERROR 22-322: Syntax error, expecting one of the following: !, !!, &, *, **, +, -, /, <, <=, <>, =, >, >=, AND, EQ, EQT, GE, GET, 
               GROUP, GT, GTT, HAVING, LE, LET, LT, LTT, NE, NET, OR, ORDER, ^=, |, ||, ~=.  
  ERROR 76-322: Syntax error, statement will be ignored.
  98         QUIT;

执行第一个查询后,下面的命令:

%PUT &varmydate;

将得到以下结果:

2020 年 3 月 1 日

但是第二次查询returns出错。

如果我使用下面的语法:

PROC SQL;
    SELECT * FROM work.MyOtherTable
    WHERE codata = '01MAR2020'd;
QUIT;

那就可以了。

您没有指出 LOG window 消息中关于 无效的内容

我假设 table mytable 中的 mydate 列是存储日期 9 的类型字符。日期的表示。 如果它是日期格式的数值变量,宏变量 myvardate 的值将类似于 21975

因此,您需要在 SAS 日期文字上下文中解析 date9 表示形式

    WHERE codata = "&myvardate"d;

需要双引号,因为宏解析不会出现在单引号文字中。