楼主: Yvonne2020
1242 8

[数据管理求助] 请教条件语句的循环 [推广有奖]

  • 0关注
  • 0粉丝

大专生

61%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
4.0510
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
762 点
帖子
6
精华
0
在线时间
110 小时
注册时间
2020-2-4
最后登录
2022-10-21

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
想实现的效果:如果每支股票的risk指标连续15个天(已有数据中不包含节假日数据,所以日期期是不连续)的值为1,则在第15天对该支股票发出预警信号(即生成一列新变量使其为1)。
请教大家,怎么用stata完成这一步,该怎样编写语句?
数据如下:

  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input long stkcd str10 trddy double risk
  4. 2 "1997-01-13" 0
  5. 2 "1997-01-14" 0
  6. 2 "1997-01-15" 0
  7. 2 "1997-01-16" 0
  8. 2 "1997-01-17" 0
  9. 2 "1997-01-20" 0
  10. 2 "1997-01-21" 0
  11. 2 "1997-01-22" 0
  12. 2 "1997-01-23" 0
  13. 2 "1997-01-24" 0
  14. 2 "1997-01-27" 0
  15. 2 "1997-01-28" 0
  16. 2 "1997-01-29" 0
  17. 2 "1997-01-30" 0
  18. 2 "1997-01-31" 0
  19. 2 "1997-02-17" 0
  20. 2 "1997-02-18" 0
  21. 2 "1997-02-19" 0
  22. 2 "1997-02-20" 0
  23. 2 "1997-02-21" 0
  24. 2 "1997-02-24" 0
  25. 2 "1997-02-25" 0
  26. 2 "1997-02-26" 0
  27. 2 "1997-02-27" 0
  28. 2 "1997-02-28" 0
  29. 2 "1997-03-03" 0
  30. 2 "1997-03-04" 0
  31. 2 "1997-03-05" 0
  32. 2 "1997-03-06" 0
  33. 2 "1997-03-07" 1
  34. 2 "1997-03-10" 0
  35. 2 "1997-03-12" 0
  36. 2 "1997-03-13" 0
  37. 2 "1997-03-14" 0
  38. 2 "1997-03-17" 0
  39. 2 "1997-03-18" 0
  40. 2 "1997-03-19" 0
  41. 2 "1997-03-20" 0
  42. 2 "1997-03-21" 0
  43. 2 "1997-03-24" 1
  44. 2 "1997-03-25" 1
  45. 2 "1997-03-26" 1
  46. 2 "1997-03-27" 1
  47. 2 "1997-03-28" 1
  48. 2 "1997-03-31" 1
  49. 2 "1997-04-01" 1
  50. 2 "1997-04-02" 1
  51. 2 "1997-04-03" 1
  52. 2 "1997-04-04" 1
  53. 2 "1997-04-07" 1
  54. 2 "1997-04-08" 1
  55. 2 "1997-04-09" 1
  56. 2 "1997-04-10" 1
  57. 2 "1997-04-11" 1
  58. 2 "1997-04-14" 1
  59. 2 "1997-04-15" 1
  60. 2 "1997-04-16" 1
  61. 2 "1997-04-17" 1
  62. 2 "1997-04-18" 1
  63. 2 "1997-04-21" 1
  64. 2 "1997-04-22" 1
  65. 2 "1997-04-23" 1
  66. 2 "1997-04-24" 1
  67. 2 "1997-04-25" 1
  68. 2 "1997-04-28" 1
  69. 2 "1997-04-29" 1
  70. 2 "1997-04-30" 1
  71. 2 "1997-05-05" 1
  72. 2 "1997-05-06" 1
  73. 2 "1997-05-07" 1
  74. 2 "1997-05-08" 1
  75. 2 "1997-05-09" 1
  76. 2 "1997-05-12" 1
  77. 2 "1997-05-13" 1
  78. 2 "1997-05-14" 1
  79. 2 "1997-05-15" 1
  80. 2 "1997-05-16" 1
  81. 2 "1997-05-19" 0
  82. 2 "1997-05-20" 0
  83. 2 "1997-05-21" 0
  84. 2 "1997-05-22" 0
  85. 2 "1997-05-23" 0
  86. 2 "1997-05-26" 0
  87. 2 "1997-05-27" 0
  88. 2 "1997-05-28" 0
  89. 2 "1997-05-29" 0
  90. 2 "1997-06-02" 0
  91. 2 "1997-06-03" 0
  92. 2 "1997-06-04" 0
  93. 2 "1997-06-05" 0
  94. 2 "1997-06-06" 0
  95. 2 "1997-06-09" 0
  96. 2 "1997-06-10" 0
  97. 2 "1997-06-11" 0
  98. 2 "1997-06-12" 0
  99. 2 "1997-06-13" 0
  100. 2 "1997-06-16" 0
  101. 2 "1997-06-17" 0
  102. 2 "1997-06-18" 0
  103. 2 "1997-06-19" 0

  104. 3 "1997-01-13" 0
  105. 3 "1997-01-14" 0
  106. 3 "1997-01-15" 0
  107. 3 "1997-01-16" 0
  108. 3 "1997-01-17" 0
  109. 3 "1997-01-20" 0
  110. 3 "1997-01-21" 0
  111. 3 "1997-01-22" 0
  112. 3 "1997-01-23" 0
  113. 3 "1997-01-24" 0
  114. 3 "1997-01-27" 0
  115. 3 "1997-01-28" 0
  116. 3 "1997-01-29" 0
  117. 3 "1997-01-30" 0
  118. 3 "1997-01-31" 0
  119. 3 "1997-02-17" 0
  120. 3 "1997-02-18" 0
  121. 3 "1997-02-19" 0
  122. 3 "1997-02-20" 0
  123. 3 "1997-02-21" 0
  124. 3 "1997-02-24" 0
  125. 3 "1997-02-25" 0
  126. 3 "1997-02-26" 0
  127. 3 "1997-02-27" 0
  128. 3 "1997-02-28" 0
  129. 3 "1997-03-03" 0
  130. 3 "1997-03-04" 0
  131. 3 "1997-03-05" 0
  132. 3 "1997-03-06" 0
  133. 3 "1997-03-07" 0
  134. 3 "1997-03-10" 0
  135. 3 "1997-03-11" 0
  136. 3 "1997-03-12" 1
  137. 3 "1997-03-13" 1
  138. 3 "1997-03-14" 1
  139. 3 "1997-03-17" 1
  140. 3 "1997-03-18" 1
  141. 3 "1997-03-19" 1
  142. 3 "1997-03-20" 1
  143. 3 "1997-03-21" 1
  144. 3 "1997-03-24" 1
  145. 3 "1997-03-25" 1
  146. 3 "1997-03-26" 1
  147. 3 "1997-03-27" 1
  148. 3 "1997-03-28" 1
  149. 3 "1997-03-31" 1
  150. 3 "1997-04-01" 1
  151. 3 "1997-04-02" 1
  152. 3 "1997-04-03" 1
  153. 3 "1997-04-04" 1
  154. 3 "1997-04-07" 1
  155. 3 "1997-04-08" 1
  156. 3 "1997-04-09" 1
  157. 3 "1997-04-10" 1
  158. 3 "1997-04-11" 1
  159. 3 "1997-04-14" 1
  160. 3 "1997-04-15" 1
  161. 3 "1997-04-16" 1
  162. 3 "1997-04-17" 1
  163. 3 "1997-04-18" 1
  164. 3 "1997-04-21" 1
  165. 3 "1997-04-22" 1
  166. 3 "1997-04-23" 1
  167. 3 "1997-04-24" 1
  168. 3 "1997-04-25" 0
  169. 3 "1997-04-28" 0
  170. 3 "1997-04-29" 0
  171. 3 "1997-04-30" 0
  172. 3 "1997-05-05" 0
  173. 3 "1997-05-06" 0
  174. 3 "1997-05-07" 0
  175. 3 "1997-05-08" 0
  176. 3 "1997-05-09" 0
  177. 3 "1997-05-12" 0
  178. 3 "1997-05-13" 0
  179. 3 "1997-05-14" 0
  180. 3 "1997-05-15" 0
  181. 3 "1997-05-16" 0
  182. 3 "1997-05-19" 0
  183. 3 "1997-05-20" 0
  184. 3 "1997-05-21" 0
  185. 3 "1997-05-22" 0
  186. 3 "1997-05-23" 0
  187. 3 "1997-05-26" 0
  188. 3 "1997-05-27" 0
  189. 3 "1997-05-28" 0
  190. 3 "1997-05-29" 0
  191. 3 "1997-05-30" 0
  192. 3 "1997-06-02" 0
  193. 3 "1997-06-03" 0
  194. 3 "1997-06-04" 0
  195. 3 "1997-06-05" 0
  196. 3 "1997-06-06" 0
  197. 3 "1997-06-09" 0
  198. 3 "1997-06-10" 0
  199. 3 "1997-06-11" 0
  200. 3 "1997-06-12" 0
  201. 3 "1997-06-13" 0
  202. 3 "1997-06-16" 0
  203. 3 "1997-06-17" 0
  204. end
复制代码




二维码

扫码加我 拉你入群

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

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

关键词:generated generate install example double

回帖推荐

黃河泉 发表于2楼  查看完整内容

请先安装 ssc install tsspell,试试
沙发
黃河泉 在职认证  发表于 2020-2-19 17:36:19 |只看作者 |坛友微信交流群
请先安装 ssc install tsspell,试试
  1. bys stkcd (trddy): gen t = _n
  2. tsset stkcd t

  3. // ssc install tsspell
  4. tsspell risk

  5. gen x = risk*_seq
  6. gen wanted = 0
  7. replace wanted = 1 if x >= 15
复制代码

使用道具

藤椅
Yvonne2020 发表于 2020-2-19 21:30:54 |只看作者 |坛友微信交流群
黃河泉 发表于 2020-2-19 17:36
请先安装 ssc install tsspell,试试
这个方法很好用,谢谢黄老师!

使用道具

板凳
黃河泉 在职认证  发表于 2020-2-20 07:51:33 |只看作者 |坛友微信交流群
Yvonne2020 发表于 2020-2-19 21:30
这个方法很好用,谢谢黄老师!
此外,Andrew Musau 也建议:
  1. bys stkcd (trddy): gen t = _n
  2. bys stkcd (t): gen group = sum(risk!=risk[_n-1]) if risk
  3. bys stkcd group (t): gen wanted1 = _n>14 & risk
复制代码

使用道具

报纸
爱上下雪天13 学生认证  发表于 2020-2-20 08:02:48 来自手机 |只看作者 |坛友微信交流群
Yvonne2020 发表于 2020-2-19 16:53
想实现的效果:如果每支股票的risk指标连续15个天(已有数据中不包含节假日数据,所以日期期是不连续)的值 ...
谢谢老师分享

使用道具

地板
Yvonne2020 发表于 2020-2-20 10:04:43 |只看作者 |坛友微信交流群

RE: 请教条件语句的循环

黃河泉 发表于 2020-2-20 07:51
此外,Andrew Musau 也建议:
谢谢老师分享!有个不太懂的地方:请问“ gen wanted1 = _n>14 & risk”这句表示的是两个if语句还是两个变量相乘呀?

使用道具

7
黃河泉 在职认证  发表于 2020-2-20 10:13:25 |只看作者 |坛友微信交流群
Yvonne2020 发表于 2020-2-20 10:04
谢谢老师分享!有个不太懂的地方:请问“ gen wanted1 = _n>14 & risk”这句表示的是两个if语句还是两个变 ...
应该是 (两个 if 要同时满足)
  1. bys stkcd group (t): gen wanted2 = _n>14 & risk == 1
复制代码

使用道具

8
Yvonne2020 发表于 2020-2-20 10:18:29 |只看作者 |坛友微信交流群
黃河泉 发表于 2020-2-20 10:13
应该是 (两个 if 要同时满足)
明白啦!谢谢老师

使用道具

9
tianwk 发表于 2020-2-24 20:31:02 |只看作者 |坛友微信交流群
thanks for sharing

使用道具

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

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

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

GMT+8, 2024-4-26 23:11