如何解决SAS EG Proc SQL-在WHERE中添加括号
在我正在使用的一段代码中,我编写了一个PROC SQL步骤:
PROC SQL;
SELECT
*
FROM
Dataset
WHERE variable = .;
QUIT;
自从最近升级到较新版本的SAS以来,此代码已开始引起问题,尤其是WHERE命令(是否称为命令?)。
我们发现一种解决方法是按如下方式重写代码:
PROC SQL;
SELECT
*
FROM
Dataset
(WHERE= (variable = .));
QUIT;
不幸的是,我们谁都不知道为什么与不带括号的版本相比有什么不同,所以我的问题是为什么这样做有效?这是在SQL上下文中读取方式的不同,还是SAS处理方式的不同以及其背后的逻辑是什么?
谢谢。
解决方法
两个版本的SAS之间应该没有区别。您发布的两段代码在功能上是相同的。
您使用的第二个SQL代码是SAS特定的功能,可让您在输入/输出期间应用dataset options。这几乎适用于SAS 9.4 / Viya中的所有proc,包括SQL和数据步骤。这对于重命名变量,从proc预过滤输出数据或应用特定于数据库的选项很有帮助。
输入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;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。