Разрешение макропеременных с помощью специальных символов - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь передать макропеременную, созданную Call symputx, которая имеет специальный символ (подчеркивание), но не в состоянии преуспеть, вот код, который я написал.

data _null_; 
    call symputx('name', scan( "&table" ,2,'.')); run; 

%let location= E:\drives\Monthly; 

Proc export data=file
outfile= "&location.\&name..txt"  dbms=dlm replace; 
run;

Когда макрос-переменная NAME не имеет специальных символов, код выполняется отлично, однако он показывает ошибку аутентификации или не разрешает макрос или любую другую ошибку.

Мне не хватает маски специальных символов, как мне поступить здесь?

Так вот подробности: (добавлено из комментария @Richard)

%let location=%nrstr(E:\Reports\Monthly\Updates (NEW)_UPPDATE_LIST);
%let Name = %nrstr(Table_20);
Proc export dbms=dlm 
  data=Newfile 
  replace
  outfile= "&location=.\&Name..txt" ;
run;

Когда я подчеркиваю в имени таблицы, это выдает эту ошибку

ERROR: Insufficient authorization to access
E:\Reports\Monthly\Updates (NEW)_UPPDATE_LIST

Я должен добавить, что я использую оператор% include для запуска программы.

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Я думаю, проблема связана с разрешением на каталог.Смотрите разрешение на каталог, чтобы убедиться, что у вас есть доступ.

0 голосов
/ 14 сентября 2018

NRSTR - это функция макросов, и ее преобразование в нормальное токенирование во время SAS-интерпретации потока ввода кода может потребовать UNQUOTE

% STR и% NRSTR Функции

Использование функций% STR и% NRSTR

Если специальный символ или мнемоника влияет на способ, которым макропроцессор создает операторы макропрограммы, вы должны маскировать элемент во время компиляции макроса (или во время компиляцииоператора макропрограммы в открытом коде) с использованием функций цитирования макросов% STR или% NRSTR.

и

% UNQUOTE Function

Во время выполнения макроса снимает маску со всех специальных символов и мнемонических операторов для значения.

...