楼主: zwnSAS121
1210 0

[程序分享] 解决实际问题之批量导出股票数据集 [推广有奖]

  • 6关注
  • 2粉丝

博士生

19%

还不是VIP/贵宾

-

威望
0
论坛币
294 个
通用积分
2.0010
学术水平
13 点
热心指数
16 点
信用等级
13 点
经验
2473 点
帖子
112
精华
0
在线时间
330 小时
注册时间
2015-12-18
最后登录
2020-8-29

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
  1. /*批量输出命名规则的数据集*/
  2. data stock;
  3. retain code close date;
  4. informat date yymmdd10.;
  5. input code close date;
  6. format date yymmdd10. code z6.;
  7. cards;
  8. 000001   10.2       2016-01-02
  9. 000001   10.3       2016-01-03
  10. 000001   10.7       2016-01-04
  11. 000002   9.2        2016-01-02
  12. 000002   9.3        2016-01-03
  13. 000002   9.7        2016-01-04
  14. 000004   8.2        2016-01-02
  15. 000004   8.3        2016-01-03
  16. 000004   8.7        2016-01-04
  17. ;
  18. /*如何通过编程把各自股票代码指定观测输出到各自的数据集中,
  19. 最好比如以字母a开头,以股指代码为后缀形成数据集命名。
  20. 例如上述数据集内容就要形成数据a000001、a000002、a000004。*/

  21. /*解决方案一*/
  22. proc sql noprint;
  23. select count(distinct code)
  24.       Into :N
  25.       from stock;
  26. select distinct code
  27.       into :code1-:code%left(&N)  
  28.       from stock;
  29. quit;

  30. %macro split;
  31. %do i=1 %to &N;
  32. data a&&code&i;
  33. set stock;
  34. if code="&&code&i" then output a&&code&i;
  35. run;
  36. proc export data=a&&code&i outfile = "D:\a&&code&i...csv"
  37. dbms=csv replace;
  38. putnames=yes;
  39. run;
  40. %end;
  41. %mend split;
  42. %split

  43. /*附上其他大神的解决方案*/
  44. /*解决方案二*/
  45. proc sql;
  46. select distinct code into:key separated by ' '
  47. from stock;
  48. quit;

  49. %macro dist;
  50. %do i=1 %to %sysfunc(countw(&key));
  51. %let hat=%scan(&key,&i);               
  52. data a&hat;
  53. set stock;
  54. where code="&hat";
  55. run;
  56. proc export outfile="D:\a&hat..csv" dbms=csv replace;
  57. /*optional: export all these files */
  58. run;
  59. %end;
  60. %mend;
  61. %dist

  62. /*解决方案三*/
  63. proc sort data=stock;by code;run;
  64. data stock1;set stock;by code;if first.code then num+1;run;
  65. proc sql noprint;
  66. select max(num) into:num  from stock1;
  67. quit;

  68. %macro exportfile(ds,n);
  69.            %do i=1 %to &n;
  70.               data a&i (drop=num);
  71.                      set &ds;
  72.                          where num=&i;
  73.                   run;
  74.                   proc sql noprint;
  75.                     select distinct(code) into :filename from a&i;
  76.           quit;
  77.           %put &filename;
  78.                   proc export data=a&i dbms=csv replace outfile="d:\a&filename..csv";
  79.                   run;
  80.            %end;
  81. %mend exportfile;
  82. %exportfile(stock1,&num);

  83. /*解决方案四*/
  84. proc sql;
  85. create table list as
  86. select distinct code from stock;
  87. quit;

  88. data _null_;
  89. set list;
  90. call execute('data a'||strip(code)||';
  91. set stock;
  92. where code='||quote(strip(code))||';
  93. run;');
  94. run;
复制代码


二维码

扫码加我 拉你入群

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

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

关键词:实际问题 股票数据 数据集 proc sql Distinct

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

本版微信群
加好友,备注cda
拉您进交流群

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

GMT+8, 2024-4-19 15:42