Объединить две строки для пути к файлу в SAS

#variables #sas #filepath #sas-macro

#переменные #sas #путь к файлу #sas-макрос

Вопрос:

У меня есть две строки, которые я хочу объединить, чтобы получить путь к файлу, который будет использоваться в инструкции PROC IMPORT в SAS

 %let TypeName = XYZ;
%let InputDirectory = \Nam1Nam2Nam3Dataset;
%let FileType = Filing.csv;
%let Filename = amp;TypeNameamp;FileType;
%put amp;Filename;
%let CompInputDirect = amp;InputDirectoryamp;Filename;

PROC IMPORT DATAFILE= %sysfunc(amp;CompInputDirect)
OUT= outdata
DBMS=csv
REPLACE;
GETNAMES=YES;
RUN;
 

Я получаю сообщение об ошибке, в котором говорится, что

 ERROR: Function name missing in %SYSFUNC or %QSYSFUNC macro function reference.  
 

Как мне поместить переменную макроса, содержащую полный путь к файлу, в инструкцию Proc Import? Заранее спасибо.

Ответ №1:

Я полагаю, вы имели в виду использовать функцию КАВЫЧЕК.

 %sysfunc(quote(amp;CompInputDirect))
 

Или вы можете указать свои собственные кавычки.

 "amp;CompInputDirect"
 

Комментарии:

1. Привет @data_null Спасибо за это!

Ответ №2:

Разрешение символов макроса amp;<name> более формально amp;<name>. Часто . не используется, когда происходит разрешение, когда другие символы или токены разбивают поток отправки.

Вы должны быть осторожны, если вы абстрагировали . расширение файла dot (). Вам понадобятся двойные точки, чтобы разрешить filename и разделять расширение точкой. Хорошей привычкой при работе с частями имени файла является использование синтаксиса формального разрешения.

Пример:

 %let folder = \Nam1Nam2Nam3Dataset;
%let file = XYZ;
%let ext = csv;

proc import datafile = "amp;folder.amp;file..amp;ext." ...
                                     ^^