楼主: dbjqw
2927 12

如何找出某变量中满足条件的元素 [推广有奖]

  • 0关注
  • 0粉丝

博士生

42%

还不是VIP/贵宾

-

威望
0
论坛币
2393 个
通用积分
4.3500
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
4392 点
帖子
139
精华
0
在线时间
457 小时
注册时间
2009-12-7
最后登录
2024-11-29

楼主
dbjqw 在职认证  发表于 2014-3-16 23:03:08 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
数据集A(date 是年月):
id     date
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


数据集B:
id   date
1   201003
2   201004
3   201006

问题:我要从A中找出B中各id对应月份的前后各两月,即要得到:

数据集C:
id     date
1     201001
1     201002
1     201004
1     201005
2     201002
2     201003
2     201005
2     201006

3     201004
3     201005
3     201007
3     201008



请问如何编代码,谢谢!!
二维码

扫码加我 拉你入群

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

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

关键词:date ATE 数据集 如何 元素

沙发
farmman60 发表于 2014-3-17 00:00:08
proc sql;
  create table want as
  select a.id, a.date from a,b
  where a.id=b.id and  ( -2<=a.date-b.date<=2  and a.date^=b.date);
  quit;

藤椅
dbjqw 在职认证  发表于 2014-3-17 09:51:34
farmman60 发表于 2014-3-17 00:00
proc sql;
  create table want as
  select a.id, a.date from a,b
谢谢!

板凳
dbjqw 在职认证  发表于 2014-3-17 10:03:02
farmman60 发表于 2014-3-17 00:00
proc sql;
  create table want as
  select a.id, a.date from a,b
请问如果我的数据是跨年的应该如何解决呢?比如:
数据集A:
id     date
1     200910
1     200911
1     200912
1     201001
1     201002
1     201003
1     201004

数据集B:
id     date
1     201001

要得到数据集C:
1     200911
1     200912
1     201002
1     201003

谢谢!

报纸
soporaeternus 发表于 2014-3-17 10:06:05
intck+input
Let them be hard, but never unjust

地板
dbjqw 在职认证  发表于 2014-3-17 10:13:00
soporaeternus 发表于 2014-3-17 10:06
intck+input
我对sql过程不懂,能不能请您说得明白一些,谢谢!

7
farmman60 发表于 2014-3-17 22:36:30
data a;
input id    date;
cards;
1     200910
1     200911
1     200912
1     201001
1     201002
1     201003
1     201004
2     201101
2     201102
2     201103
2     201104
2     201105
;
run;
data B;
input id     date;
cards;
1     201001
2     201103
;
run;

data a;
set a;
_date=input(put(date,6.),yymmn6.);
format _date yymmn6.;
rename _date=date;
drop date;
run;


data b;
set b;
_date=input(put(date,6.),yymmn6.);
format _date yymmn6.;
rename _date=date;
drop date;
run;

proc sql;
  create table want as
  select a.id, a.date from a,b
  where a.id=b.id and a.date between intnx('month',b.date,-2) and intnx('month',b.date,2)and a.date^=b.date;
  quit;

8
dbjqw 在职认证  发表于 2014-3-18 21:39:44
farmman60 发表于 2014-3-17 22:36
data a;
input id    date;
cards;
谢谢!想问问这句:
_date=input(put(date,6.),yymmn6.);

貌似直接替换成informat date yymmn6.;也可以?

9
sharpe123 在职认证  发表于 2014-3-23 16:32:34
farmman60 发表于 2014-3-17 22:36
data a;
input id    date;
cards;
想请问一下如果A的时间不是连续的。
例如200908 200911 201001 201003 201004 201005
这时想从A中找出B中各id 对应的最近的两个月的数据。该用什么函数,如何编代码?

10
farmman60 发表于 2014-3-23 21:03:17
data a;
input id    date;
cards;
1     200910
1     200911
1     201001
1     201004
2     201103
2     201105
2     201107
2     201108
;
run;
data B;
input id     date;
cards;
1     201001
2     201105
;
run;


data want(rename=(_id=id _date=date));
  if 0 then set a(rename=(id=_id date=_date));
  declare hash h(dataset:'a(rename=(id=_id date=_date))',multidata:'y',ordered:'y');
  h.definekey('_id','_date');
  h.definedata(all:'y');
  h.definedone();
  declare hiter hi('h');

  set b;
  rc=hi.setcur(key:id,key:date);
     hi.prev();
     output;
         hi.next();
         output;
         hi.next();
         output;
drop id date rc;
run;


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

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