作者imaltar (..)
站内Statistics
标题Re: [程式] SAS 算移动平均
时间Tue Jan 17 01:02:19 2012
※ 引述《bbearh (go)》之铭言:
: [软体程式类别]: sas
: [程式问题]: 资料处理
: [问题叙述]:
: 要处理类似 [移动平均数] 又要以id分组做.
: 因要平均的不像例子只有2 或 3, 会到30多笔.
: 这有没有一般的方法可用.
: 谢谢!
: --------------------
: 资料
: id vol
: 1 10
: 1 12
: 1 9
: 1 3
: 2 4
: 2 5
: 2 6
: 2 7
: 8 1
: 8 1
: 8 1
: ---------------------
: output:
: sum2 同一id 往下加两笔
: sum3 同一id 往下加 3笔
: 不够资料加的, 变成 .
: id vol sum2 sum3
: 1 10 22 31
: 1 12 21 24
: 1 9 12 .
: 1 3 . .
: 2 4 9 15
: 2 5 11 18
: 2 6 13 .
: 2 7 . .
: 8 1 2 3
: 8 1 2 .
: 8 1 . .
: 能够分点叙述处理流程,基本上在撰写程式或者跑统计时是相当有帮助的
: 甚至有经验的人可以藉此告知你步骤是否错误
: [程式范例]:
: 虽然张贴程式很可怕,但基本上有些程式还是要张贴才能解决
: -----------------------------------------------------------------------------
data a;
input id vol ;
cards;
1 10
1 12
1 9
1 3
2 4
2 5
2 6
2 7
8 1
8 1
8 1
;
run;
proc sort data=a;by id;
proc expand data=a out=b method=none;
by id;
convert vol=sum2/transformout=(cmovsum 2);
convert vol=sum3/transformout=(cmovsum 3);
run;
data b;set b;
if sum2=vol then sum2=.; else sum2=sum2;
run;
proc expand data=b out=c method=none;
by id;
convert sum3=sum3/transformout=(lead 1);
run;
data c;set c;if sum3=sum2 then sum3=.;run;
c就是最後的data
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.168.217.180
1F:推 bbearh:感谢! 我另外想知道是不是有现有的命令可用. 你的方法已回 01/18 00:20
2F:→ bbearh:答了我. 01/18 00:20