1

我正在尝试使用 SAS 在 WRDS 上下载整个 TAQ 数据库。以下是 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 中运行它,但它给了我一个错误“没有默认输入数据集(_LAST_IS_NULL)”。我不知道如何使用SAS,甚至一点也不知道。我想要的只是下载数据库。

如果有人可以帮助我离开这里,我真的很感激。

4

2 回答 2

3

您正在运行的代码是从您的计算机到远程服务器的 SAS/CONNECT 会话。连接后,我假设在服务器上定义了 libname TAQMSEC。所以,我猜你需要“远程提交”代码(这将my_output在服务器的 WORK 库中创建 SAS 数据集)。然后您可以使用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在检索到所需数据后使用命令断开与服务器的连接。

于 2013-07-14T14:51:05.340 回答
1

我不会说 SAS,所以我无法评论您的代码,但我不认为“taqmsec”是主要文件之一。合并交易数据保存在格式为 taq.CT_YYYYMMDD 的文件中,合并报价文件为 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 增长到超过 5GB。标准 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')
于 2014-10-30T19:35:57.447 回答