SAS: Как производить импорт с другой датой? - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть 10 CSV-файлов, которые я хотел бы сделать PROC IMPORT, по одному в зависимости от значения, введенного пользователем.Например, пользователь введет 201801 для запуска файла CSV за январь 2018 года (PROC IMPORT).

В этом случае я попытался использовать подстроку и период (в которой хранится значение yymmn6., Которое вводил пользователь), а затем оттуда,положить в процедуру импорта.Мой код, как показано ниже:

   %let period=201812;
%macro convertdate();
data convertdate;
year=substr("&period",1,4);
month=substr("&period",5,2);
if month='01' then newmonth='jan';
if month='02' then newmonth='feb';
if month='03' then newmonth='mac';
if month='04' then newmonth='apr';
if month='05' then newmonth='may';
if month='06' then newmonth='jun';
if month='07' then newmonth='jul';
if month='08' then newmonth='aug';
if month='09' then newmonth='sep';
if month='10' then newmonth='oct';
if month='11' then newmonth='nov';
if month='12' then newmonth='dec';

run;

/*Assign convertdate the only distinct record into macro, then set as the data step for proc import*/
%if month='01' %then %do;
    %let newmonth=jan;
%end;



/*proc import and remaining transformation from existing script*/
proc import out=rmr_raw_source
  file="/sasdata/source/user_files/re_&newmonth.2018.xlsx"

  dbms=xlsx replace;
  sheet="re_&newmonth.2018";
  getnames=no;
  dbsaslabel=none;
run;

%mend;
%convertdate;

Однако, это не будет работать.Я получаю предупреждение ниже:

ПРЕДУПРЕЖДЕНИЕ: Кажущаяся символьная ссылка NEWMONTH не разрешена.

У кого-нибудь есть лучшее решение?

1 Ответ

0 голосов
/ 27 февраля 2019

Вы можете попробовать что-то вроде следующего:

%let period = '201801';                                     /*7*/
%global month;
data test123;
   period = .                                        /*1*/

      full_date = cats(period,'01');                        /*2*/
      format converted_date DATE10.;                        /*3*/
      converted_date = input(full_date, yymmdd8.);          /*4*/
      month = put(converted_date,monname3.);                /*5*/
      call symput('month',month);                           /*6*/
  run;
  1. Создать переменную SAS из макроса.
  2. Установить первую дату указанного месяца.
  3. Создать новую переменную и установить формат даты.
  4. преобразовать дату ТЕКСТ в дату SAS.
  5. получить имя месяца из даты, созданной выше.
  6. создать макропеременную с именем 'month' из переменной SAS month.
  7. Сделать макропеременную 'month' глобальной.

Теперь вы можете использовать переменную месяца в любом месте кода.

...