我正在尝试使用SAS在WRDS上下载整个TAQ数据库。 Folloing是由WRDS技术支持人员提供的SAS代码:
%let wrds=wrds.wharton.upenn.edu 4016;
options comamid=TCP remote=WRDS;
signon username=_prompt_;
%macro taq_daily_dataset_list(type=ctm,begyyyymmdd=20100101,endyyyymmdd=20111231) / des="Autogenerated list of needed Daily TAQ datasets";
%let type=%lowcase(&type);
/* Get SAS date values for date range endpoints */
%let begdate = %sysfunc(inputn(&begyyyymmdd,yymmdd8.));
%let enddate = %sysfunc(inputn(&endyyyymmdd,yymmdd8.));
%do d=&begdate %to &enddate /** For each date in the DATE range */;
%let yyyymmdd=%sysfunc(putn(&d,yymmddn8.));
/*If the corresponding dataset exists, add it to the list */
%if %sysfunc(exist(taqmsec.&type._&yyyymmdd)) %then taqmsec.&type._&yyyymmdd;
%end;
%mend;
* using this macro;
data my_output;
set %taq_daily_dataset_list(type=ctm,begyyyymmdd=20100101,endyyyymmdd=20121231) open=defer;
run;
我试图在SAS中运行它,但它给了我一个erorr"没有默认的输入数据集(_LAST_IS_NULL)"。我不知道如何使用SAS,甚至不知道如何使用SAS。我只想下载数据库。
真的很感激,如果有人能帮助我离开这里。
答案 0 :(得分:3)
您运行的代码是从计算机到远程服务器的SAS / CONNECT会话。一旦连接,我假设在服务器上定义了libname TAQMSEC。所以,我的猜测是你需要“远程提交”代码(它将在服务器的WORK库中创建SAS数据集my_output
)。然后,您可以使用PROC DOWNLOAD
将其复制到本地计算机:
%let wrds=wrds.wharton.upenn.edu 4016;
options comamid=TCP remote=WRDS;
signon username=_prompt_;
RSUBMIT; /* Execute following on server after logging in */
%macro taq_daily_dataset_list(type=ctm,begyyyymmdd=20100101,endyyyymmdd=20111231) / des="Autogenerated list of needed Daily TAQ datasets";
%let type=%lowcase(&type);
/* Get SAS date values for date range endpoints */
%let begdate = %sysfunc(inputn(&begyyyymmdd,yymmdd8.));
%let enddate = %sysfunc(inputn(&endyyyymmdd,yymmdd8.));
%do d=&begdate %to &enddate /** For each date in the DATE range */;
%let yyyymmdd=%sysfunc(putn(&d,yymmddn8.));
/*If the corresponding dataset exists, add it to the list */
%if %sysfunc(exist(taqmsec.&type._&yyyymmdd)) %then taqmsec.&type._&yyyymmdd;
%end;
%mend;
* using this macro;
data my_output;
set %taq_daily_dataset_list(type=ctm,begyyyymmdd=20100101,endyyyymmdd=20121231) open=defer;
run;
/* Download result to your computer */
proc download data=my_output;
run;
ENDRSUBMIT; /* Signals end of processing on remote server */
RSUBMIT
和ENDRSUBMIT
命令之间出现的任何编程语句都在远程服务器上执行。请注意,宏是由远程SAS会话创建和执行的。
在检索所需数据后,请记住使用signoff
命令断开与服务器的连接。
答案 1 :(得分:0)
我不会说SAS,所以我不能评论您的代码,但我不认为“taqmsec”是主要文件之一。 Consolidated Trades数据保存在taq.CT_YYYYMMDD形式的文件中,Consolidated Quotes文件为taq.CQ_YYYYMMDD。这些的第一个可用日期是19930104。
当我有一个帐户时,我写了一些Python脚本来自动化从WRDS批量下载数据的过程:https://github.com/jbrockmendel/pywrds
尝试自动设置SSH密钥的脚本未经测试(如果您想帮我测试/修复它们,请发给我一个注释),但核心已经过充分测试。假设您设置了帐户和基于密钥的身份验证,则可以运行:
import pywrds
# Download the TAQ Consolidated Trades (TAQ_CT) file for 1993-06-12.
# y = [num_files, num_rows, paramiko_ssh, paramiko_sftp, time_elapsed]
y = pywrds.get_wrds('taq.ct', 1993, 06, 12)
# Loop over all available dates to download in bulk.
# The script is moderately smart about picking up
# unfinished loops where they left off.
# y = [num_files, time_elapsed]
y = pywrds.wrds_loop('taq.ct')
# Find out what the darn names of the available TAQ files are.
# y = [file_list, paramiko_ssh, paramiko_sftp]
y = pywrds.find_wrds('taq')
1993年,文件以几十MB的速度开始,taq.ct的文件大约为1 GB,taq.cq的文件大小增加到5 GB。标准WRDS帐户将您的存储空间限制为1 GB,因此尝试查询所有内容(例如taq.cq_20050401)将在您的目录中放置一个截断的文件。 pywrds.get_wrds
打破这些大查询并循环遍历较小的文件,然后在全部下载后重新组合它们。
警告:下载后,wrds_loop也会从服务器上的目录中删除这些文件。它还运行rm wrds_export*
,因为它上传的所有SAS文件都以“wrds_export”开头。确保您没有其他任何相同的模式。
相同的命令也适用于Compustat(comp.fundq,comp.g_fundq,...),CRSP(crsp.msf,crsp.dsf,...),OptionMetrics(optionm.optionm_opprcd1996,optionm.opprcd1997,。 ..),IBES,TFN,......
# Also works with other WRDS datasets.
# The day, month, and year arguments are optional.
# Get the OptionMetrics pricing file for March 1993
y = pywrds.get_wrds('optionm.opprcd', 1993, 3)
# Get the Compustat Fundamentals Quarterly file for 1997
y = pywrds.get_wrds('comp.fundq', 1997)
# Get the CRSP Monthly Stock File for all available years
y = pywrds.get_wrds('crsp.msf')