Загрузка данных из 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')