Step Boundary
SAS编程中,当跨过step boundary时,提交的代码会被触发执行。那么SAS的step boundary有哪些?有:
DATA
statementPROC
statementQUIT
statementRUN
statement- The single semicolon ; statement following a DATALINES statement
- The four semicolon ;;;; statement following a DATALINES4 statement
- The very last line of a program in batch or noninteractive processing
BYE
/ENDSAS
statement
RUN和QUIT是显式执行提交代码的语句,新的DATA或PROC是隐式执行上一个DATA或PROC。
RUN和QUIT的区别
RUN可以追溯到上个世纪老旧大型机时代,那时提交代码并不会立即执行,而是需要显式的敲一个RUN
命令,才能触发提交的代码执行(记得最开始接触编程时的BASIC语言也有RUN命令)。对于non-interactive proc, run执行完之后,这个proc也就结束了,而对于interactive proc,该proc执行完后,还保留给proc的环境,可以run新提交的代码,退出proc的交互环境,可以显式的使用quit退出。
RUN
和QUIT
的区别是RUN执行之前提交的statements,而quit除了执行之前提交的statements外,还结束该过程。QUIT语句一般用于RUN-group processing,该过程的结构一般是:
proc run-group-processing;
...
run; /* execute the first part. */
.....
run; /* execute the second part */
....
run;
quit; /* end of the processing */
对于RUN-group processing,只有RUN CANCEL
或QUIT
可以或遇到新的step boundary才能结束该过程。Base SAS run-group-processing有:
- catalog
- datasets
- plot
- pmenu
PROC SQL
是一个特例, 和run-group processing相似,但是proc sql的每个query语句都是自动执行的,RUN语句和RUN CANCEL语句不起作用,为了结束proc sql,只能用QUIT语句。
REF:
[1]. https://support.sas.com/kb/40/887.html
[2]. https://stackoverflow.com/questions/33764328/quit-vs-run-statements-in-sas/33764972