作者chien533 (谣指部总司令)
站内Statistics
标题Re: [程式] SAS retain分组执行
时间Thu Apr 2 06:29:00 2015
※ 引述《faceoflove56 (1234567)》之铭言:
: [软体程式类别]:
: SAS
: [程式问题]:
: 资料处理
: [软体熟悉度]:
: 低(1~3个月)
: [问题叙述]:
: 原始资料
: ID ACCEXP << Dummy r.v.
: 1 0
: 1 0
: 1 1
: 1 0
: 1 0
: 2 1
: 2 0
: 2 0
: 2 1
: 想变成
: -----------table test-----------
: ID ACCEXP
: 1 0
: 1 0
: 1 1
: 1 '1'
: 1 '1'
: 2 1
: 2 '1'
: 2 '1'
: 2 1
: 只要ACCEXP出现1,那麽该ID接下来的ACCEXP都要变成1
: (ACCEXP是有无会计经验,原始资料是依据当年职位来判断ACCEXP是否为1
: 但"经验"应该是有做过就有经验,故资料需做调整)
: 我的想法是设变数b,如果ACCEXP=1,那b=1,
: 因为b会retain,接下来只要做ACCEXP=b即可
: 目前问题在於ID有很多笔,从遇到第一个ACCEXP=1时b就一直为1
: 我希望每个ID都是从0开始,遇到第一个ACCEXP再变成1(也就是一个ID做一次)
: [程式范例]:
: proc sort data=mylib.a;
: by director_ID year;
: quit;
: data test;
: set mylib.ceo;
: retain b 0;
: if ACCEXP=1 then b=ACCEXP;
: by director_ID;
: run;
: -----------------------------------------------------------------------------
: 感谢~
: 另外想请教有无前辈做过CAR(cumulative abnormal return)
: 因为做CAR要抓t=-1,0,1的资料,t=-1我用LAG做,但t=1是下一笔
: 不知是否有方法取得下一笔资料(CAR完全无头绪>"<,感谢各位帮忙!!)
data step里面需要一些小处理
假设资料存成temp
则程式可写成:
data temp;
set temp;
by id; /*有这行才能分层retain*/
if first.accexp then b = 0; /*造一个暂时的变数b来存accexp累加结果*/
b+accexp; /*开始分层累加*/
if b > 0 then accexp = 1; /*b>0表示之前一定有至少一个accexp=1,
所以相对应的accexp=0改成1*/
drop b; /*b已经没有利用价值惹,砍了吧*/
run;
CAR我只会conditional autoregressive的分析
什麽cumulative abnormal return是从来没有听过
帮不上忙~
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 139.52.242.104
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Statistics/M.1427927343.A.ADA.html