-1

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

4

2 回答 2

1

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

for x = 1 to 5
...
next x

那里的所有变量都不会丢失。

纯 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 风格以及你真正想要的(例如,oraclerownum与 类似_n_),但是 SQL 固有的缺乏一致的处理顺序意味着它往往要复杂得多。

于 2013-08-22T12:01:46.387 回答
1

首先,retain在 SAS 中不是函数,而是语句。

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

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

在 SQL 中,您处理的是集合,因此没有真正的等价物,因为您没有按顺序循环遍历数据行。

于 2013-08-22T10:34:16.270 回答