全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1629 3
2014-07-23
现在我想做一组关于房贷违约的数据。原始数据如下
ID delinquency_status
1   0
1   0
1   1
1   2
1   3
1   4
1   5
1   0
1   1
2   0
...  ...
假设delinquency_status等于3的时候就为真正违约(0为没有违约;1为违约30天;2为违约60天;3为违约90天;4为违约120天;但只有违约90天才定义为真正违约),我需要创立一个新的变量,假设为X。对于同一个ID的观察值,如果DS(delinquency_status)=0或者1或者2时,X=0;当DS=3时,X=1;且DS=3之后对于相同ID的观察值X=.(missing)。
因为不同ID的观察值都有几十万个所以手动是不可能的。
需要得出的结果是:
ID delinquency_status X
1   0                            0
1   0                            0
1   1                            0
1   2                            0
1   3                            1
1   4                            .
1   5                            .
1   0                            .
1   1                            .
2   0                            0
...  ...                           ...

求大神们帮忙,小弟刚开始学习SAS捣鼓了半天都没有一点头绪。
拜谢!
二维码

扫码加我 拉你入群

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

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

全部回复
2014-7-23 09:43:37
data ds;
input id ds;
order=_n_;
datalines;
1   0
1   0
1   1
1   2
1   3
1   4
1   5
1   0
1   1
2   0
;
proc sort data=ds;
by id order;
run;
data wanted;
set ds;
by id order;
retain x;
if first.id then x=0;
if x=0 then do;
        if ds in(0,1,2) then x=0;
        else if ds=3 then x=1;
end;
else if x=1 then x=.;
else x=.;
run;
二维码

扫码加我 拉你入群

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

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

2014-7-23 10:07:24
data wanted;
set a;
retain x1;
if id ne lag(id) then x1=0;
if ds=3 then x1=1;
if x1=1 and ds ne 3 then call missing(x1);
if x1=0 and ds not in (0 1 2) then flag=1;
x=x1;
if flag then call missing(x);
drop x1 flag;
run;
二维码

扫码加我 拉你入群

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

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

2014-7-23 19:46:27
谢谢各位大神倾囊相助~问题解决了!
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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