全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1506 4
2015-06-14
假定有一观测序列:
time(分钟)people
00
31
52
63
74
105
116
217
278
time 是观测时间,people是相应的变量。其意义是累计的参与者数量。如在time=5时,共有2名参与者,在time=6时,共有3名参与者。由于存在信息的延迟,后续参加者并不能实时获得累计参加者数量的准确信息,而是只能获得这一数量的滞后信息。现规定后续参加者只能获得5分钟之前的信息,所有小于或等于5分钟内发生的信息因为信息延迟而无法获得。据此想获得如下滞后变量lag_people:

time(分钟)

people

lag_people

0

0

0

3

1

0

5

2

0

6

3

0

7

4

0

10

5

1

11

6

2

21

7

6

27

8

7

请教论坛内高手如何用sas实现?万分感谢!
二维码

扫码加我 拉你入群

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

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

全部回复
2015-6-14 23:21:13
自己顶,求大神现身
二维码

扫码加我 拉你入群

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

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

2015-6-15 10:50:11
复制代码


Lag_people.GIF
二维码

扫码加我 拉你入群

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

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

2015-6-15 14:27:50
yongyitian 发表于 2015-6-15 10:50
谢谢大神,如果原始数据是按组排列的且有多个变量,如:
grouptime(分钟)peoplesolution

1

0

0

0

1

3

1

1

1

5

2

3

1

6

3

4

1

7

4

6

1

10

5

7

1

11

6

8

1

21

7

9

1

27

8

12

2

4

0

0

2

6

5

3

2

7

6

5

2

8

7

7

2

12

8

8

2

17

10

9

2

24

12

13

现欲得到:
grouptime(分钟)peoplesolutionlag_peoplelag_solution

1

0

0

0

0

0

1

3

1

1

0

0

1

5

2

3

0

0

1

6

3

4

0

0

1

7

4

6

0

0

1

10

5

7

1

1

1

11

6

8

2

3

1

21

7

9

6

8

1

27

8

12

7

9

2

4

3

0

0

0

2

6

5

3

0

0

2

7

6

5

0

0

2

8

7

7

0

0

2

12

8

8

5

3

2

17

10

9

7

7

2

24

12

13

10

9

,如何获得?多谢多谢!!!
二维码

扫码加我 拉你入群

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

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

2015-6-15 16:00:47
yongyitian 发表于 2015-6-15 10:50
多谢大神提点,我照葫芦画瓢:data have;
   input group time people solution;
datalines;
1        0        0        0
1        3        1        1
1        5        2        3
1        6        3        4
1        7        4        6
1        10        5        7
1        11        6        8
1        21        7        9
1        27        8        12
2        4        0        0
2        6        5        3
2        7        6        5
2        8        7        7
2        12        8        8
2        17        10        9
2        24        12        13
; run;

proc sql noprint;
    create table have_0 as
    select distinct a.group, a.time, a.people, a.solution, max(b.people) as lag_people, max(b.solution) as lag_solution
    from have a, have b
    where a.time - b.time > 5 and a.group-b.group = 0
    group by a.group, a.time;
quit;

data wanted;
    merge have have_0;
    by group time;
    if missing(lag_people) then lag_people=0;
        if missing(lag_solution) then lag_solution=0;
run;

二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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