楼主: sharpe123
2401 12

怎么从非连续的数据集A中根据数据集B的内容选取特定数据。 [推广有奖]

  • 1关注
  • 1粉丝

高中生

57%

还不是VIP/贵宾

-

威望
0
论坛币
451 个
通用积分
3.0982
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
168 点
帖子
26
精华
0
在线时间
39 小时
注册时间
2010-3-31
最后登录
2021-4-30

楼主
sharpe123 在职认证  发表于 2014-3-23 16:50:57 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
数据集A  :
id        date
1        2011/2/11
1        2011/2/13
1        2011/2/17
1        2011/2/18
1        2011/2/20
1        2011/2/21
1        2011/2/24
1        2011/2/25
2        2011/2/11
2        2011/2/13
2        2011/2/17
2        2011/2/18
2        2011/2/20
2        2011/2/21
2        2011/2/24
2        2011/2/25



数据集B:
id        date
1    2011/2/172    2011/2/20
怎么从数据集A中根据 数据集B中 各id 对应日期得到前后2个数据,
也就是得到
数据集C:
id  data
1        2011/2/11
1        2011/2/13
1        2011/2/17
1        2011/2/18
1        2011/2/20

2        2011/2/17
2        2011/2/18
2        2011/2/20
2        2011/2/21
2        2011/2/24
2        2011/2/25


求大神指点!!!!
二维码

扫码加我 拉你入群

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

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

关键词:数据集 date Data ATE

回帖推荐

intheangel 发表于3楼  查看完整内容

沙发
sharpe123 在职认证  发表于 2014-3-23 16:55:41
数据集B 打歪了 应该是:
id        date
1    2011/2/17   
2    2011/2/20
————————————————————
数据集C也多打了一个,应该是:
id  data
1        2011/2/11
1        2011/2/13
1        2011/2/17
1        2011/2/18
1        2011/2/20

2        2011/2/17
2        2011/2/18
2        2011/2/20
2        2011/2/21
2        2011/2/24

藤椅
intheangel 学生认证  发表于 2014-3-23 17:36:14
  1. data a;
  2. input id date yymmdd10.;
  3. cards;
  4. 1 2011/2/11
  5. 1 2011/2/13
  6. 1 2011/2/17
  7. 1 2011/2/18
  8. 1 2011/2/20
  9. 1 2011/2/21
  10. 1 2011/2/24
  11. 1 2011/2/25
  12. 2 2011/2/11
  13. 2 2011/2/13
  14. 2 2011/2/17
  15. 2 2011/2/18
  16. 2 2011/2/20
  17. 2 2011/2/21
  18. 2 2011/2/24
  19. 2 2011/2/25
  20. ;
  21. run;
  22. data b;
  23. input id date yymmdd10.;
  24. cards;
  25. 1 2011/2/17
  26. 2 2011/2/20
  27. ;
  28. run;

  29. data a;
  30. set a;by id;
  31. if first.id then no=0;
  32. no+1;
  33. run;

  34. data c;
  35. merge a b(in=b);
  36. by id date;
  37. if b=1;
  38. run;

  39. data final;
  40. set a;
  41. delete;

  42. %macro a(i);
  43. data temp;
  44. set c;
  45. if id=&i.;
  46. call symput('n',no);
  47. run;
  48. %put &n;

  49. data d;
  50. set a;
  51. if id=&i;
  52. if &n-2<=no<=&n+2;
  53. run;

  54. data final;
  55. set final d;
  56. run;

  57. %mend a;
  58. %a(1);
  59. %a(2);
复制代码
已有 1 人评分论坛币 收起 理由
admin_kefu + 100 热心帮助其他会员

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

我是一只瘦瘦的小猪~~~
╭︿︿︿╮
{/-◎◎-/}
( (oo) )
  ︶︶︶

板凳
正午 发表于 2014-3-23 22:28:37
刚做了个一样的,只是日期值没有被我换成日期
data a;
input id date;
cards;
1     201001
1     201002
1     201003
1     201004
1     201005
1     201006
1     201007
1     201008
2     201001
2     201002
2     201003
2     201004
2     201005
2     201006
2     201007
2     201008
3     201001
3     201002
3     201003
3     201004
3     201005
3     201006
3     201007
3     201008
;
run;

data b ;
input id date;
cards;
1   201003
2   201004
3   201006
;
run;
proc sort data=a; by id;run;
proc sort data=b ;by id;run;

data c;
set a;
by id;
if first.id then do;
        set b(rename=(date=date_b));       
end;
if date=date_b-2 or date=date_b+2 then output;
run;

报纸
sharpe123 在职认证  发表于 2014-3-23 22:57:20
intheangel 发表于 2014-3-23 17:36
谢谢,大致明白你的意思。
如果数据很多的话,也就是有很多个id,且id i的取值不是连续的,诸如1、2、4、5、6、8...
那么怎么通过数据集B,来找到A中对应的数据。
已知数据集A中有多个id,每个id 有很多date,
数据集B 有多个id,每个id对应有1个date。
问题是 通过数据集B中的id 和 date ,找到对应数据集A中该id所在date前后一定数量的数据。

地板
sharpe123 在职认证  发表于 2014-3-23 23:04:34
正午 发表于 2014-3-23 22:28
刚做了个一样的,只是日期值没有被我换成日期
data a;
input id date;
谢谢你的代码。
但是你给定的数据集中的date 是连续的,那么你找到的数据必然是符合某一观测值前后n个的数据。
如果date不是连续的,例如A中date的观测值是1、2、5、6、8;
现在确定了B中某个id对应的data是5,照你的方法,找不到5前面的两个观测值(1、2)。

7
正午 发表于 2014-3-24 10:33:45
sharpe123 发表于 2014-3-23 23:04
谢谢你的代码。
但是你给定的数据集中的date 是连续的,那么你找到的数据必然是符合某一观测值前后n个的 ...
有道理,楼上那个的可以,想法很不错,看楼上的吧 QQ截图20140324103216.png

8
intheangel 学生认证  发表于 2014-3-24 14:40:00
sharpe123 发表于 2014-3-23 23:04
谢谢你的代码。
但是你给定的数据集中的date 是连续的,那么你找到的数据必然是符合某一观测值前后n个的 ...
我是赋值了一个no给它,无论是不是连续的,我设的no都是连续的啊,no就是_n_啊,我是想找前两行和后两行的数据而已,我不关心它是不是连续的
我是一只瘦瘦的小猪~~~
╭︿︿︿╮
{/-◎◎-/}
( (oo) )
  ︶︶︶

9
intheangel 学生认证  发表于 2014-3-24 14:42:05
sharpe123 发表于 2014-3-23 22:57
谢谢,大致明白你的意思。
如果数据很多的话,也就是有很多个id,且id i的取值不是连续的,诸如1、2、4、 ...
不太明白你的意思
我是一只瘦瘦的小猪~~~
╭︿︿︿╮
{/-◎◎-/}
( (oo) )
  ︶︶︶

10
intheangel 学生认证  发表于 2014-3-24 14:50:57
sharpe123 发表于 2014-3-23 22:57
谢谢,大致明白你的意思。
如果数据很多的话,也就是有很多个id,且id i的取值不是连续的,诸如1、2、4、 ...
我明白你的意思了,我的宏里面的i就是b里面的id啊,如果你的id很多,你可以先导出来,最后再include运用宏就好;
比如说我建一个txt文档;“d:\a.txt”;
文档里面是(当然你可以用sas的循环来导出来proc export file="d:\a.txt";)
%a(1);
%a(2);

然后在再%include "d:\a.txt";
系统就会自动运行宏,得到结果,这里只有两个,你有多少写多少好了
我是一只瘦瘦的小猪~~~
╭︿︿︿╮
{/-◎◎-/}
( (oo) )
  ︶︶︶

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-29 11:07