SAS中DELETE语句后RETURN是否有效?两段代码是否等价?
SAS两段条件删除代码等价性解答
结论
两段代码完全等价,你对DELETE语句的执行逻辑判断正确,第一段代码中的return语句永远不会被执行,属于冗余代码。
具体说明
你引用的SAS官方文档已经明确了DELETE的核心执行逻辑:
当DELETE执行时,当前观测不会被写入数据集,SAS会立即返回DATA步的开头执行下一次迭代。
基于这个逻辑,我们可以拆解两段代码的执行流程:
- 两段代码的触发条件完全一致:仅当
x = y成立时,才会进入对应的DO代码块 - 进入
DO块后第一行执行的都是DELETE语句,该语句执行后会直接终止当前迭代的所有后续操作,不会继续执行同一块中位于它之后的任何代码,因此第一段代码里DELETE后的return语句没有任何执行机会 - 两段代码的最终运行效果完全相同:只要
x = y成立就丢弃当前观测,直接进入下一轮DATA步迭代处理下一条数据
补充说明
如果DELETE不是DO块内的首行执行语句,且前面存在分支判断可能跳过DELETE的话,后续代码才有可能被执行。但在你给出的代码结构中,DELETE是进入DO块后必然执行的第一行语句,因此其后的return完全不会产生任何作用。
内容的提问来源于stack exchange,提问作者mjsqu
相关产品推荐
相关产品推荐

