Вы столкнулись с одним из различий между макросами и языком шагов данных.
В макросах есть понятие «цитирование», следовательно, функция макроса %unquote
. Однако это не относится к традиционным символам "
или '
; макрокотирование - это отдельная вещь, не имеющая никаких кавычек (в некоторых контекстах используются некоторые виды символов, но они больше похожи на заполнители). Они исходят из таких функций, как %str
, %nrstr
и %quote
, которые символизируют определенные вещи в макропеременной, чтобы они не анализировались до того, как они были предназначены.
В большинстве контекстов, хотя, Макроязык не очень обращают внимание на '
и "
символов, за исключением того, чтобы идентифицировать строку в кавычках в определенных контекстах синтаксического анализа, где это необходимо сделать так, чтобы все заработало логически. Следовательно, %unquote
ничего не делает о кавычках; они просто рассматриваются как обычные символы.
Вам нужно вместо этого вызвать функцию шага данных, чтобы удалить их (или некоторые другие вещи, но все они сложнее, например, с использованием различных комбинаций %substr
и %index
). Это делается с помощью %sysfunc
, например, так:
%let newvar = %sysfunc(dequote(oldvar));
Dequote()
является функцией шага данных, который выполняет в основном ту же самую функцию, что и %unquote
, но и для обычных символов котировочных ("
, '
).В зависимости от вашего конечного использования вам может потребоваться больше, чем это; Том покрывает некоторые из этих возможностей.
Трудно сказать, что вы на самом деле спрашиваете, но вы, вероятно, хотите функцию DEQUOTE(). – Tom