Получение имени файла в переменной

Я использую sas DI studio и пытаюсь получить значение даты, записанное в имени входного файла, чтобы добавить эту же дату в имя выходного файла. Итак, сначала мне нужно получить имя файла и извлечь дату, а затем поставить дату обратно. Какой самый простой подход?

2 ответа

Лучший способ автоматизировать ваш код SAS - это получить информацию о дате из системы, например:

data _null_;
   call symput("PERDATE", Compress(put(intnx('month',date(),-1,'end'), YYMMDDn8.)));
run;

С линии выше вы получаете Perdate Макропеременная в формате ГГГГММДД за предыдущий месяц (-1). Затем вы можете вычесть из этой переменной, сколько захотите.

%let ayear  = %Substr(&PERDATE,1,4);   /* ayear is the year in YYYY format */
%let amonth = %Substr(&PERDATE,5,2);   /* amonth is the month in MM format */
%let aday   = %Substr(&PERDATE,7,2);  /* aday is the day in DD format    */
%let adate=&ayear&amonth;           /* adate is if you want in format YYYYMM */ 
%put &ayear&amonth;
%put &amonth;
%put &perdate;

Затем вы можете автоматически читать ваш входной файл ежедневно или ежемесячно, не меняя имен файлов INPUT и OUTPUT. Например, если вы получаете ежемесячный отчет о продажах в таком формате, как Sales_YYYYMM тогда вы можете просто написать в своем коде, как:

infile sales_&ayear.&amonth.;  /* Put Dot after each Macro statement */

Sales_&ayear.&amonth. дам тебе Sales_201506, Вы можете описать свой выходной файл так же, как Out=result_&ayear.&amonth.;

data result_&ayear.&amonth.;
   set Sales_&ayear.&amonth.;
run;

Если вы не получаете свой файл регулярно, если вам нужно ввести дату вручную, тогда вы можете просто написать макропеременную для даты в начале вашего кода, тогда вы всегда будете использовать эту макропеременную в своем коде:

%let mydate=201506;
%put &mydate;

Таким образом, при каждом запуске вы просто меняете переменную mydate в вашем коде. Вам не нужно ничего менять...

Хитрость в том, чтобы правильно настроить метаданные ВНЕШНЕГО ФАЙЛА для входного и выходного файла. Вот как это сделать. Попробуйте создать метаданные ВНЕШНЕГО ФАЙЛА, используя уже существующий файл, чтобы метаданные столбцов создавались правильно с форматом и информацией. После создания метаданных ВНЕШНЕГО ФАЙЛА отредактируйте метаданные ВНЕШНЕГО ФАЙЛА, щелкнув правой кнопкой мыши метаданные ФАЙЛА и перейдите в Свойства -> вкладка Расположение файла. В разделе имени файла вместо уже существующего файла замените часть даты макропеременной. Например, если имя файла: c:\Sushil_20150701.txt, введите c:\Sushil_&mydatevar..txt . Также в разделе Цитирование имени файла выберите "Двойные кавычки вокруг имени файла".

То же самое касается выходного файла. Поскольку мы собираемся использовать макропеременную & mydatevar для имени входного файла в имени выходного файла, вы можете поместить mydatevar аналогично тому, как это было сделано выше.

После всего этого мы можем использовать метаданные файла с преобразованием File Reader и File Writer для чтения и записи файлов соответственно.

Надеюсь это поможет!

Другие вопросы по тегам