请选择 进入手机版 | 继续访问电脑版
楼主: 白风夕月
1024 4

[问答] 求教SAS中怎么求相邻行的非缺失值生成新变量 [推广有奖]

  • 0关注
  • 0粉丝

高中生

5%

还不是VIP/贵宾

-

威望
0
论坛币
2 个
通用积分
0.0000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
59 点
帖子
4
精华
0
在线时间
41 小时
注册时间
2017-6-15
最后登录
2024-3-6

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
之前已经有过类似的问题,如下:
[问答] 求教SAS中LAG函数的使用 https://bbs.pinggu.org/thread-2692528-1-1.html
但是他这个数据里面price变量是完整没有缺失值的,我的数据里变量有缺失值,我想求出最近的一次非缺失值生成新变量。


借用上面帖子的数据稍作修改,现有如下数据:
stockcode

time

price

1

2004

12

1

2005

13

1

2006

14

1

2007

.

1

2008

16

2

2005

17

2

2006

18

2

2007

19

3

2004

20

3

2005

.

3

2006

22

3

2008

23

4

2006

24

4

2007

25

4

2008

26

4

2009

27

5

2004

.

5

2005

28

5

2006

29

5200730


想做出以下这种格式,请问该如何编写语言呢?求教论坛里的高手解答,万分谢谢!


stockcode

time

price

price_recent

1

2004

12

.

1

2005

13

12

1

2006

14

13

1

2007

.

14

1

2008

16

14

2

2005

17

.

2

2006

18

17

2

2007

19

18

3

2004

20

.

3

2005

.

20

3

2006

22

20

3

2008

23

22

4

2006

24

.

4

2007

25

24

4

2008

26

25

4

2009

27

26

5

2004

.

.

5

2005

28

.

5

2006

29

28

520073029




二维码

扫码加我 拉你入群

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

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


回帖推荐

Cecilia_Xi 发表于2楼  查看完整内容

Cecilia_Xi 在职认证  发表于 2020-3-9 23:06:30 |显示全部楼层 |坛友微信交流群
  1. data test;
  2. input stockcode $ time price;
  3. cards;
  4. 1 2004 12
  5. 1 2005 13
  6. 1 2006 14
  7. 1 2007 .
  8. 1 2008 16
  9. 2 2005 17
  10. 2 2006 18
  11. 2 2007 19
  12. 3 2004 20
  13. 3 2005 .
  14. 3 2006 22
  15. 3 2008 23
  16. 4 2006 24
  17. 4 2007 25
  18. 4 2008 26
  19. 4 2009 27
  20. 5 2004 .
  21. 5 2005 28
  22. 5 2006 29
  23. 5 2007 30
  24. ;
  25. run;

  26. proc sort data=test;by stockcode;run;

  27. data want;
  28. set test(rename=(price=price_));
  29. by stockcode;
  30. price=lag(price_);
  31. b=lag(price);
  32. if first.stockcode then price=.; else price=price;
  33. if first.stockcode then rnk=1;else rnk+1;
  34. if not first.stockcode and rnk ne 2 and price=. then price=b;else price=price;
  35. drop b price_ rnk;
  36. run;
复制代码

使用道具

白风夕月 发表于 2020-3-11 09:39:22 |显示全部楼层 |坛友微信交流群
Cecilia_Xi 发表于 2020-3-9 23:06
@Cecilia_Xi 谢谢大神,完美实现了我的数据需求!受益匪浅!

使用道具

Cecilia_Xi 在职认证  发表于 2020-3-18 23:40:47 |显示全部楼层 |坛友微信交流群
白风夕月 发表于 2020-3-11 09:39
@Cecilia_Xi 谢谢大神,完美实现了我的数据需求!受益匪浅!
做了一下修改。若出现中间有多个年份的price值为缺失时,仍然适用(如果lag后的值是用来求年份间的差值的话)。
proc sort data=test;by stockcode time;run;
data want3/*(keep=stockcode time price change)*/;
      set test;
          by stockcode;
          retain price1 ;
          if first.stockcode then price1=.;
          if price ne . then price1=price;
          price2=lag(price1);
          if not first.stockcode and price ne . then change=price1-price2;
run;

使用道具

白风夕月 发表于 2020-3-25 13:34:39 |显示全部楼层 |坛友微信交流群
Cecilia_Xi 发表于 2020-3-18 23:40
做了一下修改。若出现中间有多个年份的price值为缺失时,仍然适用(如果lag后的值是用来求年份间的差值的 ...
@Cecilia_Xi非常非常感谢,您能考虑得这么全面!

使用道具

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

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

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

GMT+8, 2024-3-29 07:57