作者west1996 (焦了六年变脆了)
看板Statistics
标题Re: [程式] SAS分组作RETAIN
时间Fri Jun 10 20:42:47 2011
※ 引述《c21221203 (kkii)》之铭言:
: [程式问题]:
: 小弟我想对以下资料,把ID当成不同组跑以下程式,但不知道如何把一个动作
: 依组别来进行。
: RETAIN flag ;
: IF flag < SETTLE_PRICE then flag = SETTLE_PRICE ;RUN;
: [问题叙述]:
: dateDate exdae settle_price ID
: 1/2 1/15 13 1
: 1/3 1/15 13 1
: 1/4 1/15 14 1
: 1/7 1/15 15 1
: 1/8 1/15 16 1
: 1/9 1/15 19 1
: 1/10 1/15 14 2
: 1/11 1/15 17 2
: 1/12 1/15 17 2
: 1/13 1/15 25 2
: 1/14 1/15 27 2
: 1/15 1/15 15 3
: 1/16 2/16 19 3
: 1/17 2/16 20 3
: 1/18 2/16 29 3
: 1/19 2/16 29 3
: 1/20 2/16 30 3
: 想得到以下结果
: dateDate exdae settle_price ID flag
: 1/2 1/15 13 1 13
: 1/3 1/15 13 1 13
: 1/4 1/15 11 1 13
: 1/7 1/15 15 1 15
: 1/8 1/15 16 1 16
: 1/9 1/15 19 1 19
: 1/10 1/15 14 2 14
: 1/11 1/15 17 2 17
: 1/12 1/15 17 2 17
: 1/13 1/15 13 2 17
: 1/14 1/15 27 2 27
: 1/15 1/15 15 3 15
: 1/16 2/16 19 3 19
: 1/17 2/16 16 3 19
: 1/18 2/16 29 3 29
: 1/19 2/16 29 3 29
: 1/20 2/16 30 3 30
: [程式范例]:有点类似每个月再寻找过前高资料
: 目前用RETAIN , 程式会重头直行到尾 不会以每个ID范围来执行一次。
: 我想要 1追一次 2 追一次 3 追一次。
: -----------------------------------------------------------------------------
动个小手脚就行了,每读到一个新的id时让flag清空
假设原始资料已经sort by id
data new;
retain flag;
set old;
by id;
if first.id then flag=settle_price;
else do;
if flag < SETTLE_PRICE then flag = SETTLE_PRICE;
end;
run;
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.243.5.2