推 bbearh:謝謝! 澄清了我一些Macro的概念. 01/18 00:17
data a;
set yourfile;
order=_n_;
run;
proc sort data=a;by id descending order;
run;
%macro a;
data a;
set a;
sum1=vol;
%do i=1 %to 30;
%let j=%eval(&i+1);
sum&j=sum&i+lag&i(vol);
if id^=lag&i(id) then sum&j=.;
%end;
drop sum1 vol1-vol30;
run;
proc sort data=a out=a(drop=order);by order;
run;
%mend;
%a;
※ 引述《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 . .
: 能夠分點敘述處理流程,基本上在撰寫程式或者跑統計時是相當有幫助的
: 甚至有經驗的人可以藉此告知你步驟是否錯誤
: [程式範例]:
: 雖然張貼程式很可怕,但基本上有些程式還是要張貼才能解決
: -----------------------------------------------------------------------------
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.250.114.22