通过SAS Rows循环

时间:2016-02-12 02:40:11

标签: loops sas

我是SAS的新手,(我主要使用R,Python和VBA),我正在寻找一种循环SAS数据集行的方法。基本上,R等价物将是:

my_vector = c()
for(k in 1:10) {
if(k > 1 & k < 10) {
   my_vector[k-1] = mean(df[(k-1):(k+1), 1])
{
}

我的主要目标是创建一个MA过滤器来估计趋势(我可以在R中做我的作业,但我想更好地学习SAS)。

或者,另一种解决方案是将SAS数据集的特定行转换为PROC IML中的数组,但我无法弄清楚如何将列转换为数组。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

根据article

,LAG功能存在一些陷阱

如果遇到问题,请使用PROC TRANSPOSE将数据和数据处理为数组,比较列(如果var_1 ='YES'和var_2 ='YES'然后new_var ='BLUE'),或手动创建一个数组,它可能比您现在想要的要先进。

答案 1 :(得分:0)

根据我的理解,您正在寻找一种回顾方式并展望当前行的方法。如果这是正确的,那么主要的解决方案是lag()函数。这回顾了你在lag()函数中放置的变量。它也可以返回多行lag2()lag3()。另外,数据集需要按照变量进行排序。现在展望未来是棘手的,没有可用的功能,但你可以使用多个set语句来实现这个目标。

以下是Mark Keintz's paper

的展望
 data lead_example5;
     set sample1;

     if eof1=0 then
          set sample1 (firstobs=2 keep=close rename=(close=LEAD1)) end=eof1;
     else lead1=.;

    if eof3=0 then
         set sample1 (firstobs=4 keep=close rename=(close=LEAD3)) end=eof3;
    else lead3=.;
 run;

此处还有来自

的lag()函数示例
data example1;
    set sample1;

    close_1=lag(close);
    close_3=lag3(close);

    if close_1 ^=. then return_1 = close/close_1 - 1;
    if close_2 ^=. then return_3 = close/close_3 - 1;
run;