SAS PROC SQL在SAS中的差异
我要求SAS引擎在这三个代码示例之间执行的操作有什么区别?SAS PROC SQL在SAS中的差异
样品A
PROC SQL; CREATE TABLE foo AS
SELECT
aaa
FROM
table1
;
CREATE TABLE bar AS
SELECT
aaa
FROM
foo
;
样品B
PROC SQL; CREATE TABLE foo AS
SELECT
aaa
FROM
table1
;
PROC SQL; CREATE TABLE bar AS /* Difference is here */
SELECT
aaa
FROM
foo
;
样品C
PROC SQL; CREATE TABLE foo AS
SELECT
aaa
FROM
table1
;
QUIT; /* Difference is here */
PROC SQL; CREATE TABLE bar AS
SELECT
aaa
FROM
foo
;
Proc SQL
治疗以分号结尾(;
)作为声明,并将继续这样做,直到您提交quit ;
。除了最后没有quit
声明之外,第一个区块是好的,第三个区块也是如此。第二个块有一个无关的Proc SQL
,只是停止并开始SQL提交,这不是很好的代码。第一个和第三个块同样适合编程,第一个块比第三块块稍微快一点,但如果sql的第一部分失败,那么整个过程将失败,而第三块代码稍慢,但如果第一个proc sql
失败,第二个仍然会运行。
任何PROC
以QUIT
结尾的语句允许您从其中运行多个“命令”。假设您正在使用SQL进行数据探索,则可以输入您的PROC SQL
语句,然后逐个提交并执行SQL命令,而不必每次都发出PROC SQL
。当你完成你最后问题QUIT
。
这是为那些从命令行界面工作在SAS中的人设计的,而不是那些在GUI中工作的人。
另一个例子是PROC DATASETS
声明。
SAS会自动识别PROC SQL
语句的结尾,并自动为您提交QUIT;
或RUN;
代码,如果它遇到某些其他语句边界(例如另一个PROC的开头)。不过,编程惯例总是明确地结束PROC
声明与适当的RUN;
或QUIT;
语句,因为它提高了代码的可读性。
个人与PROC SQL
我宁愿添加noprint选项(PROC SQL noprint;
),以便它不会生成输出到结果窗口。如果我想查看结果,我将使用资源管理器查看表格,因为我发现它更适合于该任务,并且可以让我的结果窗口更清晰。我还想在每个PROC SQL
内发布不超过1条语句,以便我可以单独运行它们并查看它们的性能。
我认为用'RUN'结束'PROC SQL'是'坏'?来源未经证实。 – JustinJDavies 2014-09-11 16:37:44
正确 - 结束PROC SQL语句的正确语法是QUIT。我澄清了这个令人困惑的句子。谢谢。 – 2014-09-11 17:14:55
结果窗口中会有细微的差别(我知道这里创建了表,所以它是无关紧要的)。 1会将两个结果输出到单个窗口,如果sql的第一部分失败,则整个过程将失败,则2和3将输出到单独的窗口 – Longfish 2014-09-11 12:39:25
“不正确”。 'proc sql; create table foo as select * from bar; 创建表希望作为select * from sashelp.class; quit;例如,“ '确实创建了”想要“数据集。它报告PROC以错误结束,这是正确的,但它不会停止执行proc(除非您处于批处理模式,但它会以任何方式结束)。 – Joe 2014-09-11 15:18:55