楼主: 醉_清风
5354 11

[原创博文] 分享一个可以下载股票行情数据的宏 [推广有奖]

11
plasma2009 发表于 2013-5-28 22:15:55
262  %macro quotes (code=, start=, end=, prompt=NO);
263  %local code start end;
264  %local s _start _end a b c d e f g url;
265  %if (%superq(code) eq ) %then %let code=000001.SZ;
266  %let code = %upcase (&code);
267  %if (%superq(end) eq )
268  %then %let end = %sysfunc(today(),mmddyy8);
269  %if (%superq(start) eq ) %then %do;
270  %let start = %sysfunc(inputn(&end,mmddyy8.));
271  %let start = %eval (&start-30);
272  %let start = %sysfunc(putn(&start,mmddyy8.));
273  %end;
274  %if (%upcase(&prompt) eq YES) %then %do;
ERROR: 没有找到期望的 %THEN 语句。
ERROR: 将编译哑宏。
275  %window quotes rows=12 columns=30
276  [email=#2@2]#2@2[/email] "code: " code 4 c=blue a=rev_video
277  [email=#4@2]#4@2[/email] "Start: " start 8 c=blue a=rev_video
278  [email=#6@2]#6@2[/email] "End: " end 8 c=blue a=rev_video
279  ;
280  %display quotes;
281  %end;
282  %let code = %upcase (&code);
283  %if (%superq(end) eq )
284  %then %let _end = %sysfunc(today());
285  %else %let _end = %sysfunc(inputn(&end ,mmddyy10.));
286  %if (%superq(start) eq )
287  %then %let _start = %eval (&_end-30);
288  %else %let _start = %sysfunc (inputn(&start,mmddyy10.));
ERROR: %ELSE 没有匹配的 %IF 语句。
289  %let s = &code;
290  %let a = %sysfunc (month(&_start)); %let a=%eval(&a-1);
291  %let b = %sysfunc (day (&_start));
292  %let c = %sysfunc (year (&_start));
293  %let d = %sysfunc (month(&_end)); %let d=%eval(&d-1);
294  %let e = %sysfunc (day (&_end));
295  %let f = %sysfunc (year (&_end));
296  %let g = d;
297  %let and = %str(&);
298
299  %let url = http://ichart.finance.yahoo.com/table.csv;
300  %let url = &url.?s=&s;
301  %let url = &url.&and.a=&a.&and.b=&b.&and.c=&c;
302  %let url = &url.&and.d=&d.&and.e=&e.&and.f=&f;
303  %let url = &url.&and.g=&g;
304  %let url = &url.&and.ignore=.csv;
305  %put &url;
306  filename quotes URL "&url";
307  data stockquotes;
308  infile quotes dlm=",";
309  retain code "&code";
310  if _n_ = 1 then input; * skip header row;
311  input date date9. opening highest lowest closing volume;
312  format date yymmdd10.;
313  format volume comma11.;
314  run;
315  %bye:
316  %mend;
317  /*
318  调用格式如:
319  %quotes (code=aol, prompt=YES);
320
321  %quotes (code=000001.SZ, start=4/1/03, end=4/10/2010);
322
323  其中:code为股票代码,美国股票代码不用加后缀,深市代码后加.SZ,沪市代码后加.SS,如000001.SZ为深发展代码,
324  详见http://finance.yahoo.com/l
325  start和end分别为起止日期,格式为mm/dd/yyyy
326  prompt:是否弹出窗口输入上述参数
327
328  ps. 沪深股票行情数据好象每次最多只能下载200个记录.
329  */
330  %quotes (code=000001.SZ, start=1/1/2003, end=9/30/2005);
     -
     180
WARNING: 没有解析宏 QUOTES 的调用。

ERROR 180-322: 语句无效或未按正确顺序使用。

331  /* 从yahoo.com读取股票行情数据*/
332  %macro quotes(code=, start=, end=, prompt=NO);
333  %local code start end;
334  %local s _start _end a b c d e f g url;
335  %if (%superq(code) eq ) %then %let code=000001.SZ;
336  %let code = %upcase (&code);
337  %if (%superq(end) eq )
338  %then %let end = %sysfunc(today(),mmddyy8);
339  %if (%superq(start) eq ) %then %do;
340  %let start = %sysfunc(inputn(&end,mmddyy8.));
341  %let start = %eval (&start-30);
342  %let start = %sysfunc(putn(&start,mmddyy8.));
343  %end;
344  %if (%upcase(&prompt) eq YES) %then %do;
ERROR: 没有找到期望的 %THEN 语句。
ERROR: 将编译哑宏。
345  %window quotes rows=12 columns=30
346  [email=#2@2]#2@2[/email] "code: " code 4 c=blue a=rev_video
347  [email=#4@2]#4@2[/email] "Start: " start 8 c=blue a=rev_video
348  [email=#6@2]#6@2[/email] "End: " end 8 c=blue a=rev_video
349  ;
350  %display quotes;
351  %end;
352  %let code = %upcase (&code);
353  %if (%superq(end) eq )
354  %then %let _end = %sysfunc(today());
355  %else %let _end = %sysfunc(inputn(&end ,mmddyy10.));
356  %if (%superq(start) eq )
357  %then %let _start = %eval (&_end-30);
358  %else %let _start = %sysfunc (inputn(&start,mmddyy10.));
ERROR: %ELSE 没有匹配的 %IF 语句。
359  %let s = &code;
360  %let a = %sysfunc (month(&_start)); %let a=%eval(&a-1);
361  %let b = %sysfunc (day (&_start));
362  %let c = %sysfunc (year (&_start));
363  %let d = %sysfunc (month(&_end)); %let d=%eval(&d-1);
364  %let e = %sysfunc (day (&_end));
365  %let f = %sysfunc (year (&_end));
366  %let g = d;
367  %let and = %str(&);
368
369  %let url = http://ichart.finance.yahoo.com/table.csv;
370  %let url = &url.?s=&s;
371  %let url = &url.&and.a=&a.&and.b=&b.&and.c=&c;
372  %let url = &url.&and.d=&d.&and.e=&e.&and.f=&f;
373  %let url = &url.&and.g=&g;
374  %let url = &url.&and.ignore=.csv;
375  %put &url;
376  filename quotes URL "&url";
377  data stockquotes;
378  infile quotes dlm=",";
379  retain code "&code";
380  if _n_ = 1 then input; * skip header row;
381  input date date9. opening highest lowest closing volume;
382  format date yymmdd10.;
383  format volume comma11.;
384  run;
385  %bye:
386  %mend;
387  /*
388  调用格式如:
389  %quotes (code=aol, prompt=YES);
390
391  %quotes (code=000001.SZ, start=4/1/03, end=4/10/2010);
392
393  其中:code为股票代码,美国股票代码不用加后缀,深市代码后加.SZ,沪市代码后加.SS,如000001.SZ为深发展代码,
394  详见http://finance.yahoo.com/l
395  start和end分别为起止日期,格式为mm/dd/yyyy
396  prompt:是否弹出窗口输入上述参数
397
398  ps. 沪深股票行情数据好象每次最多只能下载200个记录.
399  */
400  %quotes(code=000001.SZ, start=1/1/2003, end=9/30/2005);
     -
     180
WARNING: 没有解析宏 QUOTES 的调用。

ERROR 180-322: 语句无效或未按正确顺序使用。

12
tbqujing 发表于 2013-6-17 12:31:32
要好好学习了
80 字节以内
不支持自定义 Discuz! 代码

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 06:13