请选择 进入手机版 | 继续访问电脑版
楼主: 范小田田
920 9

求代码(急) [推广有奖]

  • 3关注
  • 0粉丝

本科生

14%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
926 点
帖子
36
精华
0
在线时间
84 小时
注册时间
2011-5-24
最后登录
2016-6-8

范小田田 在职认证  发表于 2014-11-28 11:25:14 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
现在有两个变量。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

想不到好思路。。。

二维码

扫码加我 拉你入群

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

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

关键词:数据集

goyyue 发表于 2014-11-28 11:41:48 |显示全部楼层 |坛友微信交流群
如果rst只是0/1那么:

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

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

使用道具

teqel 发表于 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不好。

使用道具

jl60156 发表于 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;
已有 1 人评分论坛币 收起 理由
admin_kefu + 30 根据规定进行奖励

总评分: 论坛币 + 30   查看全部评分

使用道具

范小田田 在职认证  发表于 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

使用道具

shenliang_111 发表于 2014-11-28 18:04:14 |显示全部楼层 |坛友微信交流群
范小田田 发表于 2014-11-28 16:14
不是这个意思,第二行的ls要累加第一行ls的值,比如
ls rst
2 1
  1. data a;
  2. input ls rst;
  3. cards;
  4. 1    1
  5. .     1
  6. .     0
  7. .     1
  8. .     1
  9. ;

  10. data b;
  11. retain ls_1;
  12. set a;
  13. if _n_=1 then ls_new=ls;
  14. else ls_new=(ls_1+1)*(rst<>0);
  15. ls_1=ls_new;
  16. drop ls_1 ls;
  17. run;
复制代码

使用道具

Tigflanker 发表于 2014-11-28 19:52:16 |显示全部楼层 |坛友微信交流群
  1. data a;
  2. input ls rst;
  3. cards;
  4. 1 1
  5. . 1
  6. . 0
  7. . 1
  8. . 1
  9. ;

  10. data b;
  11.   set a(drop = ls);
  12.   by rst notsorted;
  13.   retain ls;

  14.   if first.rst then ls = rst;
  15.     else ls + 1;
  16. run;
复制代码

使用道具

jl60156 发表于 2014-11-28 21:30:15 |显示全部楼层 |坛友微信交流群
范小田田 发表于 2014-11-28 16:14
不是这个意思,第二行的ls要累加第一行ls的值,比如
ls rst
2 1
如果第一行不总是1,就加条件

data yourdata;
        set yourdata;
        retain _ls;
                if _n_=1 then _ls=ls;
                else if rst=1 then _ls+1;
                else _ls=0;
        ls=_ls;
        drop _ls;
run;
已有 1 人评分论坛币 收起 理由
admin_kefu + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

使用道具

冷月初 发表于 2014-11-28 23:11:29 |显示全部楼层 |坛友微信交流群
shenliang_111 发表于 2014-11-28 18:04
data yourdata;
     input ls ret;
         cards;
1 1
. 1
. 0
. 1
. 1
;
run;
data my (drop=_ls);
set yourdata;
retain _ls;
if _n_=1 then _ls=ls;
if ret=0 then _ls=0;
else _ls=_ls+1;
ls=_ls;
run;

我太水了 这个就是差那么一点,哎。。。

使用道具

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

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

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

GMT+8, 2024-3-29 14:28