Получение имени файла в переменной
Я использую 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 для чтения и записи файлов соответственно.
Надеюсь это поможет!