我正在努力了解有关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如何处理多个操作?到目前为止,我还没有在谷歌上找到任何东西,也没有在代码中尝试不同的场景。
答案 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。