Загрузка данных из TAQ с использованием SAS

Я пытаюсь загрузить всю базу данных TAQ на WRDS, используя SAS. Фоллинг - это код SAS, предоставленный сотрудником службы технической поддержки WRDS:

%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, даже немного. Все, что я хочу, это скачать базу данных.

Очень признателен, если кто-то может помочь мне отсюда.

2 ответа

Код, который вы запускаете, является сеансом SAS/CONNECT с вашего компьютера на удаленный сервер. Как только вы подключитесь, я предполагаю, что имя сервера TAQMSEC определено на сервере. Итак, я предполагаю, что вам нужно "удаленно отправить" код (который создаст набор данных 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 Команда отключиться от сервера после того, как вы получите нужные данные.

Я не говорю на 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 году и увеличивается до ~1 ГБ для taq.ct и>5 ГБ для taq.cq. Стандартные учетные записи WRDS ограничивают пространство для хранения до 1 ГБ, поэтому при попытке выполнить запрос, скажем, 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')
Другие вопросы по тегам