【问题标题】:SAS delete and return statementsSAS 删除和返回语句
【发布时间】:2021-12-05 21:14:58
【问题描述】:

我正在查看其他人的代码并试图确定是否:

if x = y then do;
    delete;
    return;
end;

相当于:

if x = y then do;
    delete;
end;

来自 DELETE 的文档:

当 DELETE 执行时,当前观察值不会写入数据集,SAS 会立即返回到下一次迭代的 DATA 步的开头。

这让我相信第一个例子中的'return'语句没有被执行?

【问题讨论】:

  • 对其进行测试,在 RETURN 语句之后添加一些内容,并在将触发删除子句的假数据中包含一个子句,看看会发生什么。

标签: sas


【解决方案1】:

最好是测试,而不是猜测。

  1. 使用 x/y 值创建一个数据集,一个满足条件,一个不满足。
  2. 运行数据步骤并添加 PUT 语句以便跟踪日志

从日志看DELETE执行后什么都没有,可以确认RETURN没有执行,是多余的。

仅供参考 - 需要考虑的一件事 - 这种行为是否随着时间的推移而改变,或者代码是否发生了改变,这可能曾经有效?通常是这样。

data have;
input x y;
cards;
1 2
1 1
;;;;
run;


data demo;
set have;
if x = y then do;
    put "Record Deleted 1";
    delete;
    put "Record Deleted 2";
    return;
    
    put "Record Deleted 3";
    
end;
else put "Record Retained";

run;

日志:

 78         data demo;
 79         set have;
 80         if x = y then do;
 81             put "Record Deleted 1";
 82             delete;
 83             put "Record Deleted 2";
 84             return;
 85         
 86             put "Record Deleted 3";
 87         
 88         end;
 89         else put "Record Retained";
 90         
 91         run;
 
 Record Retained
 Record Deleted 1
 NOTE: There were 2 observations read from the data set WORK.HAVE.
 NOTE: The data set WORK.DEMO has 1 observations and 2 variables.
 NOTE: DATA statement used (Total process time):
       real time           0.00 seconds
       user cpu time       0.00 seconds
       system cpu time     0.00 seconds
       memory              798.71k
       OS Memory           24232.00k
       Timestamp           10/18/2021 10:25:05 PM
       Step Count                        39  Switch Count  2
       Page Faults                       0
       Page Reclaims                     135
       Page Swaps                        0
       Voluntary Context Switches        10
       Involuntary Context Switches      0
       Block Input Operations            0
       Block Output Operations           264

【讨论】:

  • 似乎更有可能这是由不知道自己在做什么的人编写的,而不是在 SAS 中发生了一些变化(但是,谁知道在版本 6 中是什么样的——我假设?)
  • 感谢两位,这是大型机上的一段旧代码,因此很可能是从更旧的 v6 代码开发的。数据步骤中有类似的代码块,有些有返回,有些没有返回,所以我试图确定任何区别。感谢您的回答,我最终删除了退货声明。
  • 我怀疑代码改变了,在删除之前或之前有一些东西,例如它被标记而不是删除,然后它改变了,返回留在代码中。
猜你喜欢
  • 2017-09-11
  • 1970-01-01
  • 1970-01-01
  • 2017-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-05
  • 2021-03-18
相关资源
最近更新 更多