全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1551 2
2018-02-06
RATELABELCUM_RATE

0.16

N

0.16

0.1

Y

0.26

0.07

N

0.07

0.08

N

0.15

0.12

Y

0.27

0.1

N

0.1

0.08

Y

0.18

0.429

Y

0.429

我想要实现如上图的结果,当CUM_RATE>=0.2 则label变为Y,但是我还希望,如果RATE中有>=0.2的观测,则上一个label也要变为Y,即rate>=0.2的那一组观测单独分为一组. 我本来想要用lag函数更改,但是发现实现不了(可能是我使用的方法不对). 希望大神们能够不吝赐教!谢谢啦~~

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2018-2-7 11:34:25
Try this:
data have;
input RATE;
datalines;
0.16
0.1
0.07
0.08
0.12
0.1
0.08
0.429
;
run;

/*Calculate Cum_Rate*/
data cum;
        set have;
        LABEL='N';
        retain CUM_RATE 0;
        if CUM_RATE>=0.2 or RATE>=0.2 then CUM_RATE=0;
        if _n_=1 then CUM_RATE=RATE;
        else CUM_RATE=CUM_RATE+RATE;
        if CUM_RATE>=0.2 then LABEL='Y';
        n=_n_;
run;       

/*One observation down shift to carry over the RATE on the next observation */
data temp;
        set cum (firstobs=2);
        n=n-1;
        keep n RATE;
        rename RATE=RATE_NEXT;
run;

/*Merge back to apply condition of Next Rate>=0.2 */
data want;
        merge cum(in=x) temp;
        by n;
        if x;
        if RATE_NEXT>=0.2 then LABEL='Y';
        keep RATE LABEL CUM_RATE;
run;


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2018-2-17 21:37:21
temp数据集中要把CUM_RATE和LABEL drop掉,不然最后一步merge的时候会把cum数据集中的结果覆盖
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群