楼主: wsddzr
1653 1

如何用retain和first.variable [推广有奖]

  • 3关注
  • 1粉丝

本科生

86%

还不是VIP/贵宾

-

威望
0
论坛币
5 个
通用积分
0
学术水平
3 点
热心指数
4 点
信用等级
0 点
经验
1035 点
帖子
62
精华
0
在线时间
158 小时
注册时间
2013-3-10
最后登录
2021-3-20

楼主
wsddzr 发表于 2016-1-26 14:04:19 |AI写论文
5论坛币
有下面这个表格,id=1和id=2各有5组数据
Obs

ID

Repetition

species

Treatment

Week

Activity

censor

lower

upper

1

1

a

alba

1

14

0

0

14

14

2

1

a

alba

1

21

2

0

21

21

3

1

a

alba

1

28

3

0

28

28

4

1

a

alba

1

35

.

1

.

.

5

1

a

alba

1

42

.

1

.

.

6

2

b

alba

1

14

0

0

14

14

7

2

b

alba

1

21

2

0

21

21

8

2

b

alba

1

28

3

0

28

28

9

2

b

alba

1

35

.

1

.

.

10

2

b

alba

1

42

.

1

.

.

想要得到下面这样的数据,也就是当id=1时,activity第一次为.时,它的lower为上一行的week,它的upper为现在这一行的week
同理id=2。(因为是在week=35时,activity为.  , 所以下面的结果里lower为28(上一周week是28),upper为35(这一周week是35)
Obs

ID

Repetition

species

Treatment

Week

Activity

censor

lower

upper

4

1

a

alba

1

35

.

1

28

35

9

2

b

alba

1

35

.

1

28

35


最佳答案

xiuzhenning 查看完整内容

就当前这个数据顺序来写的话,简单如下: data ds_new; set ds_old; lag_week = lag(week); if missing(activity) then do; lower = lag_week; upper = week; output; end; proc sort nodupkey ; by id; run; 如果有第一条的activity为缺省值的话,要另外再做处理
关键词:Variable RETAIN First ABLE FIRS activity 如何

沙发
xiuzhenning 发表于 2016-1-26 14:04:20
就当前这个数据顺序来写的话,简单如下:
data ds_new;
  set ds_old;
  lag_week = lag(week);
  if missing(activity) then do;
    lower = lag_week;
    upper = week;
    output;
  end;
  proc sort nodupkey ; by id;
run;
如果有第一条的activity为缺省值的话,要另外再做处理
已有 1 人评分论坛币 收起 理由
admin_kefu + 25 热心帮助其他会员

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

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 18:46