全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
2608 6
2017-11-02
小白求指教,用判断语句判断条件成立时将变量赋值为1很直观,但是怎么把前后各两天的变量值赋为1呢。 比如
date       event       y
1            0           0
2            0           0
3            0           0
4            0           0
5            1           0
6            0           0
7            0           0
8            0           0
9            0           0

一个简单的例子。
replace y=1 if event==1  可以将事件当天的y值赋为1,
但是怎么前后两天的值也赋为1呢。目标是转化为:
date       event      y
1            0           0
2            0           0
3            0           1
4            0           1
5            1           1
6            0           1
7            0           1
8            0           0
9            0           0

困扰我好久了,希望各位大神指教!

二维码

扫码加我 拉你入群

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

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

全部回复
2017-11-2 12:56:59
是数据库里,还是excel文件中?
二维码

扫码加我 拉你入群

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

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

2017-11-2 22:46:33
_bill 发表于 2017-11-2 12:56
是数据库里,还是excel文件中?
是数据库里。数据比比较大,而且event没有规律。求指教
二维码

扫码加我 拉你入群

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

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

2017-11-3 09:52:23
帮你顶一下吧,想了蛮久也没想出来。。
二维码

扫码加我 拉你入群

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

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

2017-11-3 11:59:18
ORACLE:

create table TEST
(
  dt    DATE not null,
  event NUMBER(2) not null,
  y     NUMBER(2)
)
建表后,自己随便整点数据

  select *
    from test
   where dt - 2 in (select DT from Test where event > 0)
      or dt - 1 in (select DT from Test where event > 0)
      or dt in (select DT from Test where event > 0)
      or dt + 1 in (select DT from Test where event > 0)
      or dt + 2 in (select DT from Test where event > 0)

更新y值:
update test set y=1
   where dt - 2 in (select DT from Test where event > 0)
      or dt - 1 in (select DT from Test where event > 0)
      or dt in (select DT from Test where event > 0)
      or dt + 1 in (select DT from Test where event > 0)
      or dt + 2 in (select DT from Test where event > 0)
数据量大的话,效率比较低,最好拆成5个update:
update test set y=1  where dt - 2 in (select DT from Test where event > 0)
update test set y=1  where dt -1 in (select DT from Test where event > 0)
update test set y=1  where dt in (select DT from Test where event > 0)
update test set y=1  where dt +1 in (select DT from Test where event > 0)
update test set y=1  where dt +2 in (select DT from Test where event > 0)

最后记得commit
二维码

扫码加我 拉你入群

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

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

2017-11-3 12:01:20
你最好现执行查询语句,看看选出的结果集是不是你要更新的
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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