如何在transformout中运行多个操作?

时间:2017-02-27 17:27:14

标签: sas

我正在努力了解有关Proc Expand和SAS的更多信息。我无法阐明多个操作如何在转换中协同工作。当我运行下面的代码时,SAS似乎只是计算两行的向后移动总和。

proc expand data=averages out=transformed;
id date;
convert x=y / transformout=(reverse movsum 2 movsum 1 reverse);
by type notsorted;
run;

以下是结果示例:

y        x
13372   1225
20564   12147
16140   8417
14446   7723
13097   6723
15976   6374
11497   9602
12704   1895
18043   10809

当我稍微改变一下代码时,我找不到任何关于如何在SAS中生成数字的模式。这是修改后的代码。

proc expand data=averages out=transformed;
id date;
convert x=y / transformout=(reverse movsum 5 movsum 3 reverse);
by type notsorted;
run;

以下是此代码的结果:

y        x
116458  1225
112540  12147
106559  8417
103634  7723
107010  6723
103592  6374
103655  9602
100326  1895
94840   10809

在这种情况下,SAS如何处理多个操作?到目前为止,我还没有在谷歌上找到任何东西,也没有在代码中尝试不同的场景。

1 个答案:

答案 0 :(得分:0)

看起来它只是计算中间结果并将函数应用于此。因此,使用movsum 5 movsum 3与使用movsum 5执行一个处理步骤相同,然后使用movsum 3执行另一步。

所以如果你运行这个程序。

data have ;
  input x @@ ;
cards;
 1225 12147 8417 7723 6723 6374 9602 1895 10809
;

proc expand data=have out=out1 ;
  convert x=movsum2 / transformout=(reverse movsum 2 reverse);
  convert x=movsum5 / transformout=(reverse movsum 5 reverse);
run;

proc expand data=out1 out=final ;
  convert x=y1 / transformout=(reverse movsum 2 movsum 1 reverse);
  convert movsum2=y2 / transformout=(reverse movsum 1 reverse);
  convert x=z1 / transformout=(reverse movsum 5 movsum 3 reverse);
  convert movsum5=z2 / transformout=(reverse movsum 3 reverse);
run;

您将看到Y1 = Y2且Z1 = Z2。