楼主: sherrysmile
16701 27

[原创博文] 如何对大批量数据重复做线性回归 [推广有奖]

  • 0关注
  • 0粉丝

高中生

87%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
199 点
帖子
31
精华
0
在线时间
25 小时
注册时间
2011-5-2
最后登录
2011-12-18

楼主
sherrysmile 发表于 2011-9-27 09:29:46 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我现有一个文件里有几千个股票信息,想分别对每支股票做regression。我知道用 "proc reg data "语句来做,但是如果一个一个手动输入股票名称去做很麻烦。怎样写code能做使做完第一个股票的regression之后自动做下一个股票的回归一直到最后一个股票?求各位大侠不吝赐教。多谢。
二维码

扫码加我 拉你入群

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

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

关键词:线性回归 大批量 regression regressio regress 如何 信息

回帖推荐

crazygoing 发表于7楼  查看完整内容

花了点时间,给你编了代码,我测试了一下应该没问题。具体你根据自己需要再改吧。
已有 1 人评分热心指数 收起 理由
eijuhz + 1 精彩帖子

总评分: 热心指数 + 1   查看全部评分

本帖被以下文库推荐

沙发
YueweiLiu 发表于 2011-9-27 09:55:01
用宏循环来解决,你没给数据,也不好写 sample 出来。

藤椅
crazygoing 发表于 2011-9-27 10:27:56
确如二楼所述,你不给些变量,不好给你写sample。
不过你可以看看我的博客,我做的是批量logistic回归,你可以参考一下http://qoqo.blog.com/2011/05/15/logistic%E5%9B%9E%E5%BD%92%E5%8D%95%E5%9B%A0%E7%B4%A0%E5%88%86%E6%9E%90%E6%8A%A5%E8%A1%A8%E5%AE%8F/

板凳
jingju11 发表于 2011-9-27 11:35:06
crazygoing 发表于 2011-9-27 10:27
确如二楼所述,你不给些变量,不好给你写sample。
不过你可以看看我的博客,我做的是批量logistic回归,你 ...
wow.程序写得很好啊。如法炮制,京剧

报纸
sherrysmile 发表于 2011-9-28 06:12:09
crazygoing 发表于 2011-9-27 10:27
确如二楼所述,你不给些变量,不好给你写sample。
不过你可以看看我的博客,我做的是批量logistic回归,你 ...
wow 很佩服您编写的程序 正是我所需要的。我用proc reg data “ ”; by “ ”语句可以达到我要的结果,只不过正如您所说的,由于我的自变量有几千个,如果将每个自变量都复制粘贴总结到一个表里很麻烦,您的code正好能解决我的问题。只不过我对宏语句很不熟悉,能帮我具体写出我的code? 以下是我的变量,return是自变量,smb hml是因变量,现需要对return 做线性回归。希望最后汇总的数据里包含每个股票的每个因变量的coefficient值以及相对应的P值. 非常感谢您的帮助!!
date        ticker        return        smb        hml
19930104        AC        0.0298        -0.003        0.0023
19930105        AC        0.0334        0.0037        0.0026
19930106        AC        0.0432        0.0041        0.0025
19930107        AC        0.0256        0.0066        0.0017
19930108        AC        0.0355        0.0002        -0.0019
19930109        AC        0.056        0        0.003
19930110        AC        0.025        -0.0029        0.0018
19930111        AC        0.0345        0.001        0.009
19930112        AC        0.0435        0.0019        0.003
19930104        BDF        0.0435        0.0019        0.0018
19930105        BDF        0.0298        0.0016        0.009
19930106        BDF        0.0334        -0.0005        0.003
19930107        BDF        0.0432        0.0025        0.0003
19930108        BDF        0.0256        0.0062        0.0027
19930109        BDF        0.0355        -0.0019        0.0025
19930110        BDF        0.056        0.002        0.0026
19930111        BDF        0.025        -0.003        0.0023
19930112        BDF        0.0345        0.0037        0.0026
.
.
.
.

地板
sherrysmile 发表于 2011-9-28 06:15:42
jingju11 发表于 2011-9-27 11:35
wow.程序写得很好啊。如法炮制,一法也;
二法是,利用reg支持的by-processing。比如,by你的股票id, ...
多谢jingju11的提醒 用by语句的确可以得到我想要的结果
只不过就是需要复制粘贴sas output里的每个结果去excel文档
anyway thx a lot

7
crazygoing 发表于 2011-9-29 09:07:33
花了点时间,给你编了代码,我测试了一下应该没问题。具体你根据自己需要再改吧。
  1. data a;
  2. input date        ticker $     return        smb        hml ;
  3. cards;
  4. 19930104        AC        0.0298        -0.003        0.0023
  5. 19930105        AC        0.0334        0.0037        0.0026
  6. 19930106        AC        0.0432        0.0041        0.0025
  7. 19930107        AC        0.0256        0.0066        0.0017
  8. 19930108        AC        0.0355        0.0002        -0.0019
  9. 19930109        AC        0.056        0        0.003
  10. 19930110        AC        0.025        -0.0029        0.0018
  11. 19930111        AC        0.0345        0.001        0.009
  12. 19930112        AC        0.0435        0.0019        0.003
  13. 19930104        BDF        0.0435        0.0019        0.0018
  14. 19930105        BDF        0.0298        0.0016        0.009
  15. 19930106        BDF        0.0334        -0.0005        0.003
  16. 19930107        BDF        0.0432        0.0025        0.0003
  17. 19930108        BDF        0.0256        0.0062        0.0027
  18. 19930109        BDF        0.0355        -0.0019        0.0025
  19. 19930110        BDF        0.056        0.002        0.0026
  20. 19930111        BDF        0.025        -0.003        0.0023
  21. 19930112        BDF        0.0345        0.0037        0.0026
  22. ;
  23. run;
  24. %macro reg(y);/*y为应变量*/
  25. proc contents data=a(drop= date ticker smb hml ) out=namelist noprint;         /*drop 剔除非自变量*/
  26. run;
  27. proc sql noprint;
  28. select distinct name
  29.      into :depent separated by ' '
  30.      from namelist;        /*将自变量赋值到宏变量*/
  31. proc sql noprint;
  32. select  count(*)   into : nobv
  33.      from namelist ; /*将自变量数量复制到宏变量*/
  34. quit;  
  35. %do i=1 %to &nobv;
  36. %let var_=%sysfunc(scan(&depent,&i,’ ‘));
  37. ods output  anova=ano FitStatistics=fit ParameterEstimates=par;
  38. proc reg data=a;
  39. model &y=&var_;
  40. by ticker;
  41. run; /*生成单次单因素回归各种统计表*/
  42. data fit;set fit; if label2="R-Square" ;keep ticker cvalue2;rename cvalue2=Rsuqare;run;
  43. data par;set par;if variable="Intercept" then delete;drop model dependent df;run;
  44. data ano;set ano;if source="Model";keep ticker Fvalue ProbF;run;
  45. proc sort data=fit;by ticker;proc sort data=par;by ticker;proc sort data=ano;by ticker;
  46. data sum&i;merge ano fit par;by ticker;run;        /*处理统计表保留所需变量*/
  47. %end;
  48. data sum ;set sum:;run;         /*合并汇总生成所需报表*/
  49. proc datasets lib=work;save a sum;run; /*清除work中不需要的表格*/
  50. %mend;
  51. %reg(smb);
复制代码


已有 2 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子
crackman + 80 热心帮助其他会员

总评分: 经验 + 83  论坛币 + 3   查看全部评分

8
yunqingwang 在职认证  发表于 2011-9-29 10:21:45
绝对是用IML去实现最好,可以自己分析回归所出现所有情况

9
sxlion 发表于 2011-9-29 21:52:30
jingju的方法用by是个不错的选择,不过我建议用宏,这样的话,每做一次回归,取出需要的结果,然后删掉中间数据集,然后继续下一个,这样尽量减少中间数据集,以免占用不必要的空间,得到的数据集都是整理干净的结果。

这样还有利于继续分析。

可以看我的博客例子:批量拟合并提取结果参数的SAS程序

10
yunqingwang 在职认证  发表于 2011-9-29 22:16:59
sxlion 发表于 2011-9-29 21:52
jingju的方法用by是个不错的选择,不过我建议用宏,这样的话,每做一次回归,取出需要的结果,然后删掉中间 ...
几千个回归,用宏处理结果也不容易
IML,模块化编程多好啊,咋就没人用

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

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