Чтобы получить имя файла текущей программы SAS, мы можем написать
%put %sysget(SAS_EXECFILEPATH);
Мне так не повезло, что кто-то однажды создал каталог, в котором был указан амперсанд (yikes!). Давайте создадим пример папки C:\temp&other
и сохраним нашу программу test.sas
здесь в этой папке.
Теперь мой вопрос:
Возможно ли замаскировать вывод %sysget(SAS_EXECFILEPATH)
, чтобы SAS не пытался разрешить макро-переменную &other
?
Легко Решение было бы изменить имя пути, но, к сожалению, не всегда легко, и мне не разрешено менять имя папки.
Мои попытки: Ни одна из nr
функций, которые я пробовал, не помогает мне, поскольку они маскируют как %
, так и &
. Я пробовал следующее (строка с отступом - вывод журнала SAS). Обратите внимание, что %NRQUOTE
выводит то же самое, что и «голый» вызов.
%put %sysget(SAS_EXECFILEPATH);
/* WARNING: Apparent symbolic reference OTHER not resolved. */
/* C:\temp&other\test.sas */
%put %nrstr(%sysget(SAS_EXECFILEPATH));
/* %nrstr(%sysget(SAS_EXECFILEPATH)) */
%put %nrquote(%sysget(SAS_EXECFILEPATH));
/* WARNING: Apparent symbolic reference OTHER not resolved. */
/* C:\temp&other\test.sas */
%put %superq(%sysget(SAS_EXECFILEPATH));
/* WARNING: Apparent symbolic reference OTHER not resolved.*/
/* ERROR: Invalid symbolic variable name C\TEST&OTHER\TEST.SAS. */