VBA / MS SQL等同于SAS保留功能

时间:2013-08-22 06:29:03

标签: vba sas retain

是否存在与SAS Retain功能等效的VBA / MS SQL。提前谢谢。

2 个答案:

答案 0 :(得分:1)

首先,SAS中的retain不是函数,而是一个声明。

其次,它背后的想法 - 在SAS数据步骤中跨越隐式循环的迭代来保持变量的值 - 仅作为该上下文中的语句才有意义。

您可以通过各种方式在各种语言中实现相同目的。几乎所有语言都允许您显式创建循环并遍历数据行,几乎所有语言都允许您在此循环旁边存储变量的值并检索它并有条件地更改它。在VBA中,这是非常基本的:你会声明一个变量,为它赋值并引用它,并且只要你想在整个代码中循环数据。

在SQL中,你处理的是集合,所以没有真正的等价于retain,因为你没有按顺序循环遍历数据行。

答案 1 :(得分:1)

SAS中的

RETAIN告诉SAS 而不是做某事 - 即,在隐式数据步骤循环的迭代之间设置一个变量缺失。所以VBA已经做到了。

for x = 1 to 5
...
next x

没有任何变量设置为缺失。

Pure SQL有点不同,因为它不是真正基于订单的编程。但它也没有在隐式循环的迭代之间设置变量 - 但我想你知道。

如果你的意思是“有没有办法让每一行都降低价值”,那么,确定:

update tablex set var1=6

好的,现在tablex每行都有var1 = 6。这与

不完全相同
data want;
set have;
retain var1;
var1=6;
run;

因为后者允许你做类似

的事情
data want;
set have;
retain var1;
var1=var1+1;
run;

这在SQL中并不合乎逻辑。您可以执行类似的操作,具体取决于您所处的SQL风格以及实际所需的内容(例如,oracle与rownum类似_n_),但SQL固有的缺乏一致性处理订单意味着它往往要复杂得多。