Вы можете использовать функцию TRNWORD
для замены / удаления указанных c слов, таких как and or
.
Не забудьте включить начальные и конечные пробелы, чтобы не связываться с имя переменной, которую вы хотите оставить без изменений.
Вы можете использовать функцию COMPRESS
, чтобы удалить операторы, десятичные точки и все числа.
Это будет работать так долго поскольку ваши имена переменных не содержат чисел. Если это так, удалите модификатор 'd' из функции COMPRESS и измените макрос так, чтобы он использовал TRNWORD для удаления чисел с начальными пробелами (например, ' 5'
), поскольку переменные не могут начинаться с цифр.
следующий макрос извлечет указанное слово из вашей текстовой строки, сообщит результат в журнал и предоставит результат в макропеременной:
%macro extract_word(txt_string, w_num);
option nonotes;
data _null_;
_rule = "&txt_string.";
_var1 = tranwrd(_rule, ' and ', ' ');
_var2 = tranwrd(_var1, ' or ', ' ');
_var3 = compress(_var2, '^=<>.', 'd');
_word = scan(_var3, &w_num.);
call symputx("word&w_num.", _word, 'G');
run;
options notes;
%put NOTE: Word&w_num. = &&word&w_num..;
%mEnd extract_word;
Вот результаты:
%extract_word(%str(&rule.), 1);
NOTE: Word1 = limit
%extract_word(%str(&rule.), 2);
NOTE: Word2 = amount
%extract_word(%str(&rule.), 3);
NOTE: Word3 = debt