全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1923 5
2020-03-16
求教SAS如何对前后行的数值进行有条件的比对,
举例来说,有如下排序好的数据,我想取出观测值里,前后ID相同的的所在行,并对其所对应的Y值求差值。
obsIDY

1

2.14

2

2.25

3

1.9

4

1.897

5

2.87

6

2.87




我打算的是先取出相邻ID相同的数据所在行,结果如下(写代码的时候主要是卡在了这步)
obsIDY

1

2.14

2

2.25

5

2.87

6

2.87



然后再对Y求差值Z,(可以使用滞后一阶的方式,或者有其他更优解决方法),最终想要获得的数据是这样的:
obsIDYZ

2

2.25

0.11



不知道对于这样的问题SAS代码应该如何写(或者其他软件,比如stata,Eviews什么的),求教!感谢!


二维码

扫码加我 拉你入群

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

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

全部回复
2020-3-17 09:29:48
如图示例,结果大概是这样的
附件列表
微信图片_20200317092840.png

原图尺寸 2.16 KB

微信图片_20200317092840.png

微信截图_20200317092756.png

原图尺寸 7.08 KB

微信截图_20200317092756.png

二维码

扫码加我 拉你入群

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

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

2020-3-17 12:01:17
data test;
   input
obs        ID $        Y;
cards;
1        王        2.14
2        王        2.25
3        何        1.9
4        胡        1.897
5        郑        2.87
6        郑        2.87
;
run;

data want;
   set test;
   id_lag=lag(id);
   y_lag=lag(y);
   if id=id_lag then dif=y-y_lag;
run;

proc print;run;
二维码

扫码加我 拉你入群

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

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

2020-3-17 13:26:24
data result;
set table;
by id;
id_lag = lag(id);
y_lag = lag(y);
if id = id_lag then diff = y - y_lag;
if diff ^= 0 and diff ^= .;
run;
二维码

扫码加我 拉你入群

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

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

2020-3-21 20:19:38
l1i2n3i4n5g 发表于 2020-3-17 12:01
data test;
   input
obs        ID $        Y;
谢谢!
二维码

扫码加我 拉你入群

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

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

2020-3-21 20:20:47
谢谢各位的回复解答,先滞后一阶然后再用if-then 已经解决问题了!
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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