全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1165 9
2014-11-28
现在有两个变量。ls rst,数据集如下:
ls   rst
1    1
.     1
.     0
.     1
.     1
想达到这样的效果,从第二行开始,如果rst=0,则ls=0,如果rst=1,则ls=上一条ls观测集+1,即:
ls   rst
1    1
2    1
0    0
1    1
2    1

想不到好思路。。。

二维码

扫码加我 拉你入群

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

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

全部回复
2014-11-28 11:41:48
如果rst只是0/1那么:

ls=lag(rst)+1;
if rst=0 then ls=0;

如果rst 还有其他值,那么第二句还得根据rst如果是其他值时ls的取值方法来改。
二维码

扫码加我 拉你入群

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

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

2014-11-28 12:03:38
ls=(lag(rst)+1)*rst;
二维码

扫码加我 拉你入群

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

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

2014-11-28 12:50:48
teqel 发表于 2014-11-28 12:03
ls=(lag(rst)+1)*rst;
因为有IF和BY语句,LAG不好。
二维码

扫码加我 拉你入群

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

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

2014-11-28 13:17:57
data yourdata;
        set yourdata;
        retain _ls;
        if rst=1 then _ls+1;
        else _ls=0;
        ls=_ls;
        drop _ls;
run;
二维码

扫码加我 拉你入群

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

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

2014-11-28 16:14:27
jl60156 发表于 2014-11-28 13:17
data yourdata;
        set yourdata;
        retain _ls;
不是这个意思,第二行的ls要累加第一行ls的值,比如
ls rst
2 1
.  1
那么结果应该是
ls rst
2 1
3 1
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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