Как загрузить файл из Интернета и назначить его определенной папке с помощью SAS

#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
  • используйте svn команды для загрузки определенной папки из репозитория git

Пример:

Сделайте несколько последовательных графиков ответа по дате из загруженных импортированных загруженных данных.

 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;
  

Графики
введите описание изображения здесь