У меня вопрос о разрешении макропеременных в SAS. У меня есть следующий код, который является упрощенной версией гораздо большего блока. По практической причине я не могу изменить структуру кода.Разрешить переменную макроса в SAS
%let a = x1 x2 x3;
%let b = y1 y2 y3;
%let c = a b;
%macro test (input);
%local i;
%let string_c = %str(&input);
%do i=1 %to 2;
%put &%qscan(&string_c, &i); /* ? */
%end;
%mend test;
%test(&c);
В шаге? выше, я хотел бы решить и б, как макропеременные и имею системную распечатку
x1 x2 x3
и затем
y1 y2 y3
Однако приведенный выше код не reslove а и Ь, как макропеременные и система распечатывает
&a
&b
Мне интересно, есть ли какие-либо решения этой проблемы.
Большое спасибо!
Интересный ответ. Можете ли вы добавить какое-то объяснение, почему это работает, особенно почему% unquote() полезен здесь, даже если вы удаляете котировку с помощью% str() и% qscan(). Например, это помогает в этом простом случае: % macro x; x% исправления; % let x = 1; % put% unquote (&&%x); – Quentin
Спасибо, Shenglin. Он работает! Следующий вопрос, подобный Quentin's, почему он работает :) – frostman
Без% unquote, SAS интерпретирует a/b как текст плюс &, а не макро переменную & a/& b, с% unquote, принудительно склеить & и a/b вместе и восстановить нормальную токенизацию значения. –