#sas
#sas
Вопрос:
Доброе утро
Итак, я попытался загрузить zip-файл с веб-сайта и попытаться назначить местоположение.
Местоположение, которое я хочу поместить, это
S:Projects
Метод1,
Первая попытка приведена ниже
DATA _null_ ;
x 'start https://yehonal.github.io/DownGit/#/home?url=https://github.com/CSSEGISandData/COVID-19/tree/master/csse_covid_19_data/csse_covid_19_daily_reports';
RUN ;
Метод1, я могу загрузить файл, но он автоматически загружается в мою папку загрузки.
Способ 2,
итак, я узнал об этом так.
filename out "S:Projectscsse_covid_19_daily_reports.zip";
proc http
url='https://yehonal.github.io/DownGit/#/home?url=https://github.com/CSSEGISandData/COVID-19/tree/master/csse_covid_19_data/csse_covid_19_daily_reports'
method="get" out=out;
run;
Но код не работает, ничего не загружается.
как я могу загрузить файл из Интернета и назначить его определенному местоположению?
Комментарии:
1. Это может быть связано с тем, как вы используете эту службу. У вас есть ссылка на фактический исходный файл?
2. @reeza github.com/CSSEGISandData/COVID-19/tree/master /… и я пытаюсь загрузить все файлы, используя yehonal.github.io/DownGit/#/home
3. Вы хотите загружать все файлы сразу или каждый день по последнему ежедневному файлу? И вы действительно хотите загрузить файл или импортировать данные? Вы можете просто импортировать файл непосредственно в набор данных SAS, т.Е. Импортировать напрямую из файла Github.
4. Моя логика в sas прямо сейчас, donwload all file
5. К вашему сведению — проблема заключалась в загрузке службы, файл, вероятно, не готов, для подготовки / запуска кода требуется некоторое время, поэтому вы также можете попробовать переход в режим ожидания, возможно, пока вы ждете завершения полной загрузки, а затем загрузить его. Не уверен, как это сделать, поэтому я, вероятно, счел бы более быстрым обойти это на данный момент.
Ответ №1:
Я бы, вероятно, рекомендовал в этом случае макрос (или ВЫЗОВ EXECUTE), но я предпочитаю макросы, а затем вызываю макрос через ВЫЗОВ EXECUTE. Потребовалось около минуты, чтобы запустить SAS Academics on Demand (бесплатный облачный сервис).
*set start date for files;
%let start_date = 01-22-2020;
*macro to import data;
%macro importFullData(date);
*file name reference;
filename out "/home/fkhurshed/WANT/amp;date..csv";
*file to download;
%let download_url = "https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/amp;date..csv";
proc http url=amp;download_url
method="get" out=out;
run;
*You can add in data import/append steps here as well as necessary;
%mend;
%importFullData(amp;start_date.);
data importAll;
start_date=input("amp;start_date", mmddyy10.);
*runs up to previous day;
end_date=today() - 1;
do date=start_date to end_date;
formatted_date=put(date, mmddyyd10.);
str=catt('%importFullData(', formatted_date, ');');
call execute(str);
end;
run;
Комментарии:
1. Это супер замечательно, я кодировал SAS в течение 2 лет. Я должен изучить больше. Так что я могу быть таким, как ты. Я действительно ценю вашу помощь. Спасибо
Ответ №2:
URL-адрес при просмотре в браузере использует javascript в браузере для создания zip-файла, который автоматически загружается. Proc HTTP
не запускает javascript, поэтому не сможет загрузить конечный ответ, который представляет собой созданный zip-файл, поэтому вы получаете сообщение 404.
Список файлов в репозитории можно получить в формате json из url
https://api.github.com/repos/CSSEGISandData/COVID-19/contents/csse_covid_19_data/csse_covid_19_daily_reports
Данные списка содержат download_url для каждого файла csv.
Download_url будет выглядеть так
https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_daily_reports/01-22-2020.csv
Вы можете загружать отдельные файлы с помощью SAS per @Reeza, или
- используйте
git
команды или функции SAS git * для загрузки репозитория- AFAIK
git archive
для загрузки только определенной подпапки репозитория недоступен, обнаруженный сервером github
- AFAIK
- используйте
svn
команды для загрузки определенной папки из репозитория git- требуется
svn
установка (https://subversion.apache.org /) Я использовал SlikSVN
- требуется
Пример:
Сделайте несколько последовательных графиков ответа по дате из загруженных импортированных загруженных данных.
options noxwait xsync xmin source;
* use svn to download all files in a subfolder of a git repository;
* local folder for storing data from
* COVID-19 Data Repository by the Center for Systems Science and Engineering (CSSE) at Johns Hopkins University;
%let covid_data_root = c:tempcsse;
%let rc = %sysfunc(dcreate(covid,amp;covid_data_root));
%let download_path = amp;covid_data_rootcovid;
%let repo_subdir_url = https://github.com/CSSEGISandData/COVID-19/tree/master/csse_covid_19_data/csse_covid_19_daily_reports;
%let svn_url = %sysfunc(tranwrd(amp;repo_subdir_url, tree/master, trunk));
%let os_command = svn checkout amp;svn_url "amp;download_path";
/*
* uncomment this block to download the (data) files from the repository subfolder;
%sysexec %superq(os_command);
*/
* codegen and execute the PROC IMPORT steps needed to read each csv file downloaded;
libname covid "amp;covid_data_root.covid";
filename csvlist pipe "dir /b ""amp;download_path""";
data _null_;
infile csvlist length=l;
length filename $200;
input filename $varying. l;
if lowcase(scan(filename,-1,'.')) = 'csv';
out = 'covid.day_'||translate(scan(filename,1,'.'),'_','-');
/*
* NOTE: Starting 08/11/2020 FIPS data first starts appearing after a few hundred rows.
* Thus the high GuessingRows
*/
template =
'PROC IMPORT file="#path##filename#" replace out=#out# dbms=csv; ' ||
'GuessingRows = 5000;' ||
'run;';
source_code = tranwrd (template, "#path#", "amp;download_path");
source_code = tranwrd (source_code, "#filename#", trim(filename));
source_code = tranwrd (source_code, "#out#", trim(out));
/* uncomment this line to import each data file */
*call execute ('%nrstr(' || trim (source_code) || ')');
run;
* memname is always uppercase;
proc contents noprint data=covid._all_ out=meta(where=(memname like 'DAY_%'));
run;
* compute variable lengths for LENGTH statement;
proc sql noprint;
select
catx(' ', name, case when type=2 then '$' else '' end, maxlen)
into
:lengths separated by ' '
from
( select name, min(type) as type, max(length) as maxlen, min(varnum) as minvarnum, max(varnum) as maxvarnum
from meta
group by name
)
order by minvarnum, maxvarnum
;
quit;
* stack all the individual daily data;
data covid.all_days;
attrib date length=8 format=mmddyy10.;
length amp;lengths;
set covid.day_: indsname=dsname;
date = input(substr(dsname,11),mmddyy10.);
format _character_; * reset length based formats;
informat _character_; * reset length based informats;
run ;
proc sort data=covid.all_days out=us_days;
where country_region = 'US';
by province_state admin2 date;
run;
ods html gpath='.' path='.' file='covid.html';
options nobyline;
proc sgplot data=us_days;
where province_state =: 'Cali';
*where also admin2=: 'O';
by province_state admin2;
title "#byval2 County, #byval1";
series x=date y=confirmed;
xaxis valuesformat=monname3.;
label province_state='State' admin2='County';
label confirmed='Confirmed (cumulative?)';
run;
ods html close;
options byline;