SAS EG Proc SQL - 将括号添加到 WHERE
SAS EG Proc SQL - Adding Brackets to WHERE
在我正在使用的一段代码中,我有一个 PROC SQL 步骤是这样写的:
PROC SQL;
SELECT
*
FROM
Dataset
WHERE variable = .;
QUIT;
自从最近升级到较新版本的 SAS 后,此代码开始引起问题,特别是 WHERE 命令(是否称为命令?)。
我们发现一个修复方法是重写代码:
PROC SQL;
SELECT
*
FROM
Dataset
(WHERE= (variable = .));
QUIT;
不幸的是,我们中的 none 非常确定为什么这与没有括号的版本相比会有所不同,所以我的问题是为什么这样做有效?这是在 SQL 上下文中读取方式的不同,还是 SAS 处理它的方式及其背后的逻辑不同?
谢谢。
两个版本的 SAS 之间应该没有区别。您发布的两段代码在功能上是相同的。
您正在使用的第二个 SQL 代码是一个 SAS-specific 功能,允许您在 input/output 期间应用 dataset options。这对 SAS 9.4/Viya 中的几乎所有过程都可用,包括 SQL 和数据步骤。这有助于重命名变量,pre-filtering 从 procs 输出数据,或应用 database-specific 选项。
输入 where=
选项较少使用,但在 SQL 中确实有一个有用的应用程序,可以提高 SAS 内的效率。例如下面两段代码是等价的:
在使用子查询加入之前过滤数据:
proc sql noprint;
create table foo as
select t1.group, sum(t2.var) as sum_var
from table1 as t1
LEFT JOIN
(select * from table2 where var > 2) as t2
ON t1.group = t2.group
;
quit;
在不使用子查询的情况下加入之前过滤数据:
proc sql noprint;
create table foo as
select t1.group, sum(t2.var) as sum_var
from table1 as t1
LEFT JOIN
table2(where=(var > 2)) as t2
ON t1.group = t2.group
;
quit;
在我正在使用的一段代码中,我有一个 PROC SQL 步骤是这样写的:
PROC SQL;
SELECT
*
FROM
Dataset
WHERE variable = .;
QUIT;
自从最近升级到较新版本的 SAS 后,此代码开始引起问题,特别是 WHERE 命令(是否称为命令?)。
我们发现一个修复方法是重写代码:
PROC SQL;
SELECT
*
FROM
Dataset
(WHERE= (variable = .));
QUIT;
不幸的是,我们中的 none 非常确定为什么这与没有括号的版本相比会有所不同,所以我的问题是为什么这样做有效?这是在 SQL 上下文中读取方式的不同,还是 SAS 处理它的方式及其背后的逻辑不同?
谢谢。
两个版本的 SAS 之间应该没有区别。您发布的两段代码在功能上是相同的。
您正在使用的第二个 SQL 代码是一个 SAS-specific 功能,允许您在 input/output 期间应用 dataset options。这对 SAS 9.4/Viya 中的几乎所有过程都可用,包括 SQL 和数据步骤。这有助于重命名变量,pre-filtering 从 procs 输出数据,或应用 database-specific 选项。
输入 where=
选项较少使用,但在 SQL 中确实有一个有用的应用程序,可以提高 SAS 内的效率。例如下面两段代码是等价的:
在使用子查询加入之前过滤数据:
proc sql noprint;
create table foo as
select t1.group, sum(t2.var) as sum_var
from table1 as t1
LEFT JOIN
(select * from table2 where var > 2) as t2
ON t1.group = t2.group
;
quit;
在不使用子查询的情况下加入之前过滤数据:
proc sql noprint;
create table foo as
select t1.group, sum(t2.var) as sum_var
from table1 as t1
LEFT JOIN
table2(where=(var > 2)) as t2
ON t1.group = t2.group
;
quit;