bobguy 发表于 2012-9-15 10:02 
Change it as below,
data _null_;
FILENAME NASDQ URL 'http://www.nasdaqtrader.com/dynamic/SymDir/nasdaqlisted.txt';
DATA NASDAQSTOCKLIST;
INFILE NASDQ DELIMITER = '|' MISSOVER LRECL = 128 FIRSTOBS = 2;
LENGTH SYMBOL $5. SECURITYNAME $55. MARKETCATEGORY $15. TESTISSUE $2. FINANCIALSTATUS $2. ROUND $2.;
INPUT SYMBOL $ SECURITYNAME $ MARKETCATEGORY ~ TESTISSUE $ FINANCIALSTATUS $ ROUND $;
RUN;
data NASDAQSTOCKLIST;
set NASDAQSTOCKLIST;
where index (symbol, "AA")>0;
run;
DATA _NULL_;
SET NASDAQSTOCKLIST;
edte=today();
bdte=edte-10;
eday=day(edte);
emnth=month(edte);
eyr=year(edte);
bday=day(bdte);
bmnth=month(bdte);
byr=year(bdte);
CALL EXECUTE("filename "||Symbol||" url '"||'http://ichart.finance.yahoo.com/table.csv?s='
||compress(Symbol)||'&d='||strip(emnth)||'&e='||strip(eday)||'&f='||strip(eyr)||'&g=d&a='||strip(bmnth)||'&b='||strip(bday)
||'&c='||strip(byr)||'&ignore=.csv'||"' DEBUG;");
CALL EXECUTE("data "||Symbol||";");
CALL EXECUTE("infile "||Symbol||" dsd lrecl = 128 firstobs = 2;");
CALL EXECUTE("informat Date yymmdd10.;");
CALL EXECUTE("input Date Open High Low Close Volume AdjClose;");
CALL EXECUTE("format Date yymmdd10.;");
CALL EXECUTE("RUN;");
RUN;
PROC SQL;
DROP TABLE NASDAQSTOCKLIST;
QUIT;
PROC CONTENTS DATA = WORK._ALL_ OUT = CONTENTS NOPRINT;RUN;
PROC SORT DATA = CONTENTS(WHERE = (NOBS > 1000) KEEP = MEMNAME NOBS) NODUPKEY; BY MEMNAME; RUN;
DATA _NULL_; SET CONTENTS;
CALL EXECUTE("PROC SORT DATA = "||MEMNAME||"(KEEP = DATE CLOSE);");
CALL EXECUTE("BY DATE;RUN;");
RUN;
DATA _NULL_; SET CONTENTS END = EOF;
IF _N_ = 1 THEN CALL Execute("DATA OVERALL;MERGE");
CALL EXECUTE(MEMNAME||"(RENAME = (CLOSE = "||MEMNAME||"))");
IF EOF THEN DO; CALL EXECUTE(";BY DATE;RUN;");
END;
RUN;
大牛能帮我看看我上面的code,follow您的方法但是不正确。我想用NASDAQ里面的symbol作为索引然后下载每一个symbol的data,最后合并到一起。谢谢!