1315 2

[学习分享] SAS 编程求教 [推广有奖]

  • 0关注
  • 1粉丝

本科生

54%

还不是VIP/贵宾

-

威望
0
论坛币
3 个
通用积分
0
学术水平
0 点
热心指数
1 点
信用等级
1 点
经验
1472 点
帖子
32
精华
0
在线时间
92 小时
注册时间
2016-8-13
最后登录
2020-6-8

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
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函数更改,但是发现实现不了(可能是我使用的方法不对). 希望大神们能够不吝赐教!谢谢啦~~

二维码

扫码加我 拉你入群

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

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

关键词:label Rate Abel ATE Lab

已有 1 人评分信用等级 收起 理由
eijuhz + 1 精彩帖子

总评分: 信用等级 + 1   查看全部评分

沙发
xiami2000 在职认证  发表于 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;


已有 1 人评分经验 论坛币 热心指数 收起 理由
admin_kefu + 50 + 20 + 2 热心帮助其他会员

总评分: 经验 + 50  论坛币 + 20  热心指数 + 2   查看全部评分

使用道具

藤椅
abc630110845 发表于 2018-2-17 21:37:21 |只看作者 |坛友微信交流群
temp数据集中要把CUM_RATE和LABEL drop掉,不然最后一步merge的时候会把cum数据集中的结果覆盖

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-25 06:04