楼主: Andrew7087
2266 16

[编程问题求助] foreach怎么用 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

大专生

90%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0.1683
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
156 点
帖子
16
精华
0
在线时间
117 小时
注册时间
2018-12-24
最后登录
2024-6-3

楼主
Andrew7087 发表于 2020-8-16 17:26:26 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
数据如下

----------------------- copy starting from the next line -----------------------
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input long Liscd float r
  4. 112005 -1.1283283
  5. 112005  -4.896427
  6. 112005   .7003947
  7. 112005  1.0149968
  8. 112005   .6404027
  9. 112005   .5572735
  10. 112005  .56583285
  11. 112005   .0501867
  12. 112005  1.0195905
  13. 112005  1.2671194
  14. 112005   .4497726
  15. 112005  .22810838
  16. 112005  .08054333
  17. 112005  -5.094564
  18. 112006  -.7719162
  19. 112006  -6.742584
  20. 112006  1.6475964
  21. 112006  1.0478933
  22. 112006  .28545246
  23. 112006   .7494419
  24. 112006   .5222339
  25. 112006   .7523049
  26. 112006   .9739857
  27. 112006    .988769
  28. 112006   .8611933
  29. 112006  .06301104
  30. 112006 -.13780731
  31. 112006  -6.300318
  32. 112011  -4.531723
  33. 112011  .26550543
  34. 112011   .9878948
  35. 112011  1.1427187
  36. 112011   .7347154
  37. 112011   .8167152
  38. 112011   .7017801
  39. 112011  .19830687
  40. 112011  -.9447712
  41. 112011   .4684099
  42. 112011   .3499039
  43. 112011  .51975226
  44. 112011 .016737415
  45. 112012  1.0600435
  46. 112012 -4.5027833
  47. 112012  -.3031643
  48. 112012  1.9809593
  49. 112012   .4572738
  50. 112012   .8819432
  51. 112012   .8479121
  52. 112012    .610545
  53. 112012 -1.7408445
  54. 112012 .014142763
  55. 112012  1.2934626
  56. 112012   .3127197
  57. 112012  .30710825
  58. 112012   .1831433
  59. end
复制代码

------------------ copy up to and including the previous line ------------------

其中Liscd是证券代码,r是收益率。现在我想做一个循环,对每个证券的r,检验其偏度和峰度的显著性。已知检验函数为sktest,不能用by,现在想用foreach完成,该怎么做
二维码

扫码加我 拉你入群

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

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

关键词:foreach Reach For including generated

沙发
Andrew7087 发表于 2020-8-16 17:55:37
或者朋友们有什么更好的建议也请不吝赐教

藤椅
DΘstinyじò 发表于 2020-8-16 19:26:52
循环:
  1. quietly{
  2.         gen p_skew=.
  3.         gen p_kurt=.
  4.         egen Liscd_id=group(Liscd)
  5.         sum Liscd_id
  6.         forvalues id=1(1)`r(max)'{
  7.         preserve
  8.         keep if Liscd_id==`id'
  9.         sktest r
  10.         restore
  11.         replace  p_skew = `r(p_skew)'   if Liscd_id==`id'
  12.         replace  p_kurt = `r(p_kurt)'   if Liscd_id==`id'
  13.         }
  14.         drop Liscd_id
  15. }
复制代码

也可以用statsby命令:
  1. statsby r(p_skew) r(p_kurt) ,by(Liscd) clear: sktest r
  2. //注意保存原始数据,statsby命令后,会清除当前数据,显示统计指标数据
复制代码

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
黃河泉 + 2 + 2 + 2 精彩帖子

总评分: 学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

板凳
黃河泉 在职认证  发表于 2020-8-17 08:51:57
Andrew7087 发表于 2020-8-16 17:55
或者朋友们有什么更好的建议也请不吝赐教
或 (ssc install runby) 试试
  1. cap program drop sk
  2. program define sk
  3.   sktest r
  4.   gen p_skew = `r(p_skew)'  
  5.   gen p_kurt = `r(p_kurt)'  
  6. end

  7. runby sk, by(Liscd)  
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 热心帮助其他会员

总评分: 学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

报纸
DΘstinyじò 发表于 2020-8-17 12:02:02
黃河泉 发表于 2020-8-17 08:51
或 (ssc install runby) 试试
感谢黄老师,哈哈,又学到一招

地板
黃河泉 在职认证  发表于 2020-8-17 15:42:58
DΘstinyじò 发表于 2020-8-17 12:02
感谢黄老师,哈哈,又学到一招
哈哈,我就会这两招,都被你学去了!

7
Andrew7087 发表于 2020-8-19 23:31:20
DΘstinyじò 发表于 2020-8-16 19:26
循环:
也可以用statsby命令:
受教了,感谢。
我之前的写法是这样的,我感觉至少在代码长度上要简洁一点,不过也有点缺陷,放在这交流一下。
gen P_skew=.
gen P_kurt=.
tostring Liscd, generate(Liscd1)
encode Liscd1, gen(Liscd2)
forvalues i=1/3156 {
        sktest r if Liscd2==`i'
        replace P_skew=r(P_skew) if Liscd2==`i'
        replace P_kurt=r(P_kurt) if Liscd2==`i'
}
代码里那个3156是在得到Liscd2以后自己查看到的Liscd2的最大值,表示有3156只证券。这个也是问题所在,这一步必须要手工进行。现在看了您的group(Liscd)和forvalues这两行以后相信会有改进空间,多谢。

8
Andrew7087 发表于 2020-8-20 11:18:58
黃河泉 发表于 2020-8-17 08:51
或 (ssc install runby) 试试
老师,试了您说的代码,跑出的结果有问题,给的回复是这样的
. runby sk, by(Liscd)

--------------------------------------
Number of by-groups    =         3,156
by-groups with errors  =         3,156
by-groups with no data =             0
Observations processed =        76,606
Observations saved     =             0
--------------------------------------
这是为什么呢

9
黃河泉 在职认证  发表于 2020-8-21 09:40:32
Andrew7087 发表于 2020-8-20 11:18
老师,试了您说的代码,跑出的结果有问题,给的回复是这样的
. runby sk, by(Liscd)
我试过是没问题的 (根据你给的资料)!

10
Andrew7087 发表于 2020-8-21 10:12:23
黃河泉 发表于 2020-8-21 09:40
我试过是没问题的 (根据你给的资料)!
老师,找到问题了,确实是您的代码里有问题,第四行和第五行应该是
gen p_skew=`r(P_skew)'
gen p_skew=`r(P_skew)'
r()里的P应该是大写,改过来以后结果正常了

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-7 04:13