SAS: Как предотвратить «ПРЕДУПРЕЖДЕНИЕ: явный вызов макроса не разрешен» в операторе libname? - PullRequest
0 голосов
/ 16 июня 2020

Я должен использовать пароль, аналогичный паролю, указанному ниже, в операторе LIBNAME. Пароль включает знак процента (%), что приводит к ПРЕДУПРЕЖДЕНИЮ: очевидный вызов макроса PS не разрешен:

LIBNAME EXAMPLE ORACLE
user=user1
password="'thisisapassword%PS|("
PATH=PATH1
SCHEMA=SCHEMA1
;

Поскольку пароль уже включает одинарную кавычку, я должен использовать двойные кавычки для пароля , что в конечном итоге приводит к предупреждению из-за использования знака процента

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

Ответы [ 2 ]

2 голосов
/ 16 июня 2020

Заключите пароль в одинарные кавычки, чтобы предотвратить взаимодействие с макросистемой. Удвойте одинарные кавычки в одинарных кавычках, если пароль буквально содержит одинарные кавычки.

Пример:

PROC PWENCODE IN='''thisisapassword%PS|(';
/*                ^^                         ^^ showing where doubling up is needed */ 

Из документации « Использование кавычек с символьными константами" ( my bold ) :

Если символьная константа включает одинарную кавычку, заключите ее в двойные кавычки. Например, чтобы указать символьное значение Tom's как константу, введите следующее:

name="Tom's";

Другой способ написать ту же строку - заключить строку в одинарные кавычки. и до express апостроф в виде двух последовательных кавычек. SAS обрабатывает две последовательные кавычки как одну кавычку :

name='Tom''s';

Тот же принцип справедлив для двойных кавычек и символьного значения Tom"s:

name="Tom""s";

0 голосов
/ 16 июня 2020

может ты сможешь это проверить. Я не могу проверить, потому что мы не используем эти символы в паролях, но это может работать без предупреждения:

PROC PWENCODE IN="'thisisapassword%PS|(";
run;
%put &_PWENCODE;

LIBNAME EXAMPLE ORACLE
user=user1
password="&_PWENCODE"
PATH=PATH1
SCHEMA=SCHEMA1
;
...