SAS PROC SQL验证

时间:2018-11-24 23:52:23

标签: sql sas

我想问一下关于“ PROC SQL VALIDATE”的问题,如下:

关于以下PROC SQL查询的哪个语句为“假”?

    proc sql;
validate
select name label="Country",
rate label="Literacy Rate"
from world.literacy 
where "Asia" =
(select continent 
from world.continents
where literacy.name=
continents.country)
order by 2;

我想知道为什么下面的第一个选项不是“ false”吗?

 (a) The query syntax is not valid. 

 (b) The outer query must pass values to the subquery 
    before the subquery can return values to the outer 
    query

(c) PROC SQL will not execute this query when it is
    submitted   

(d) After the query is submitted, the SAS log will 
    indicate whether the query has valid syntax

答案是(d) 我想知道为什么查询语法无效?

非常感谢您!

1 个答案:

答案 0 :(得分:0)

您发布的查询具有一个correlated子查询(from world.continents)。该子查询无法单独评估,但实际上取决于外部查询(world.literacy)传递给它们的值。

让我解释一下这四个选项中的每一个,

(a) The query syntax is not valid. - False

不,这是完全有效的语句,其中有一个外部查询和一个子查询。

(b) The outer query must pass values to the subquery before the 
    subquery can return values to the outer query - True

如顶部所述,这是实际发生的情况。

(c) PROC SQL will not execute this query when it is submitted - True

您可以在doumentation中看到,validate语句仅检查查询表达式的语法和语义的准确性,而不执行表达式。

(d) After the query is submitted, the SAS log will 
    indicate whether the query has valid syntax - True

相同的documentation还提到validate语句在SAS日志中写入一条消息,指出该查询有效。如果有错误,则validate会将错误消息写入SAS日志。