Я использую студию sas DI, и я пытаюсь получить значение даты, записанное внутри имени входного файла, чтобы поставить ту же дату и в имя выходного файла. Поэтому сначала мне нужно получить имя файла и вынуть дату, а затем вернуть дату. Какой самый простой подход?Получение имени файла в переменной
ответ
Лучший способ автоматизировать ваш код 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;
Затем вы можете прочитать входной файл ежедневно или ежемесячно автоматически без изменения названия входного и выходного файла. Например, если вы получаете продаж отчет ежемесячно в формате, как 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
в Yoru коде. Вам не нужно ничего менять ...
Трюк настроен для метаданных ВНЕШНЕГО ФАЙЛА для ввода и вывода файла правильно. Вот как это сделать. Попробуйте создать метаданные EXTERNAL FILE с использованием уже существующего файла, чтобы метаданные столбцов были правильно созданы с использованием формата и informat. После создания метаданных EXTERNAL FILE отредактируйте метаданные EXTERNAL FILE, щелкнув правой кнопкой мыши метаданные FILE и перейдите в Properties -> Location File Location. В разделе имени файла вместо уже существующего файла заменить часть даты на макро переменную. Например, если имя файла: c: \ Sushil_20150701.txt введите c: \ Sushil_ mydatevar..txt. Также в разделе «НАЗВАНИЕ ФАЙЛА» выберите «Двойные кавычки вокруг имени файла»
То же самое касается выходного файла. Поскольку мы собираемся использовать макрокоманду mydatevar на имя входного файла в имени выходного файла, вы можете поместить mydatevar так же, как это было сделано выше.
После того, как все это сделано, мы хорошо используем метаданные файлов с помощью File Reader и File Writer для чтения и записи файлов соответственно.
Надеюсь, это поможет!
Часть записи файла должна быть точно такой, как вы сказали, без сомнения. Но как насчет имени входного файла? Я имею в виду, как установить значение даты ввода из метаданных файла? (Предположим, что имя файла: c: \ Sushil_20110728 ..txt) –
ну, вы можете добавить свою логику в раздел предварительного кода свойств потока задания, если вы хотите, чтобы значение даты в макропеременной было доступно для другого преобразования. Таким образом, согласно моему ответу, следующее имя файла: c: \ Sushil_ & mydatevar..txt и макрода переменная mydatevar могут быть добавлены в предварительном коде, например. % let mydatevar = 20110728; , Если все не так просто и логика должна быть введена, чтобы получить дату ввода, мы можем закодировать логику в самой секции предварительного кода, чтобы установить значение для mydatevar. – sushil
да и для этого какой должен быть код? –
- 1. Получение имени файла из for %% i переменной
- 2. Получение имени переменной
- 3. Ruby: Получение имени переменной
- 4. C# Получение имени переменной
- 5. Получение имени ссылочной переменной
- 6. Получение имени экземпляра переменной
- 7. Ruby: получение имени переменной
- 8. Получение имени переменной в Python?
- 9. Получение имени файла и сохранение его в переменной в Python
- 10. CLang 3.5 LibTooling: получение имени файла переменной в clang :: VarDecl
- 11. Динамическое получение имени файла
- 12. Получение ошибки в имени файла
- 13. Получение имени файла в PHP
- 14. Получение имени переменной для NullReferenceException
- 15. Получение полезного имени переменной из другой переменной
- 16. Получение имени каталога из имени файла
- 17. Получение переменной по имени в C#
- 18. SED, Получение последнего имени файла
- 19. Получение имени файла, управляемого .htaccess?
- 20. ASP.NET: Получение имени файла ASPX
- 21. Получение имени файла без расширения
- 22. Получение имени файла не работает
- 23. Получение имени EditText переменной массива android
- 24. Получение имени файла для ALAsset
- 25. Получение имени файла из строки
- 26. Получение имени файла из PhotoPrevs.append
- 27. Получение имени файла из BufferedImage
- 28. Получение файла имени файла, полученного на сервере
- 29. Получение имени файла makefile из файла makefile
- 30. Получение имени файла с помощью python Watchdog
Проблема заключается в том, что я хочу получить дату из метаданных файла в sas DI ... i.e. когда часть даты изменяется для входного файла, имя выходного файла будет соответствующим образом изменяться, а также не нужно будет перенастраивать задание. –