楼主: 叶子_Ftd
2354 6

[编程问题求助] 怎样将某个事件发生日前后各两天的变量值赋为1 [推广有奖]

  • 0关注
  • 0粉丝

大专生

31%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
309 点
帖子
10
精华
0
在线时间
73 小时
注册时间
2013-9-9
最后登录
2018-6-18

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
小白求指教,用判断语句判断条件成立时将变量赋值为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

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

二维码

扫码加我 拉你入群

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

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

关键词:变量值 replace Event place vent

沙发
_bill 发表于 2017-11-2 12:56:59 |只看作者 |坛友微信交流群
是数据库里,还是excel文件中?

使用道具

藤椅
叶子_Ftd 发表于 2017-11-2 22:46:33 |只看作者 |坛友微信交流群
_bill 发表于 2017-11-2 12:56
是数据库里,还是excel文件中?
是数据库里。数据比比较大,而且event没有规律。求指教

使用道具

板凳
我是小肚肚 发表于 2017-11-3 09:52:23 |只看作者 |坛友微信交流群
帮你顶一下吧,想了蛮久也没想出来。。

使用道具

报纸
_bill 发表于 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

使用道具

地板
_bill 发表于 2017-11-3 12:01:20 |只看作者 |坛友微信交流群
你最好现执行查询语句,看看选出的结果集是不是你要更新的

使用道具

7
黃河泉 在职认证  发表于 2017-11-4 07:01:46 |只看作者 |坛友微信交流群
1. Robert Picard 非常好的建议如下 (请先安装 ssc install rangestat):
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input float(date event)
  4. 1 0
  5. 2 0
  6. 3 0
  7. 4 0
  8. 5 1
  9. 6 0
  10. 7 0
  11. 8 0
  12. 9 0
  13. 10 0
  14. 11 0
  15. 12 1
  16. 13 0
  17. 14 0
  18. 15 0
  19. end

  20. rangestat (max) event, interval(date -2 2)
  21. list, sepby(event_max)
复制代码
2. 尔后建議用 dataex (先 ssc install dataex 并见说明) 将原始 Stata 资料中具有”代表性”的一部分资料列出,以供有意回答者实验之用,并能提供具体操作指令。并请参考 https://bbs.pinggu.org/thread-5048204-1-1.htmlhttps://bbs.pinggu.org/thread-5917273-1-1.html

使用道具

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

本版微信群
加好友,备注jltj
拉您入交流群

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

GMT+8, 2024-9-21 08:55