У меня есть набор данных с 400 наблюдений 4 цифровых кодов, которые я хотел бы подушечка с места на обеих сторонахКак найти и заменить определенный текст в наборе данных SAS?
ex. Dataset
obs code
1 1111
2 1112
3 3333
.
.
.
400 5999
Как я могу пройти через еще большого объема данных и заменить каждое вхождение любого из заполненные 400 кодов с помощью "".
ex. Large Dataset
obs text
1 abcdef 1111 abcdef
2 abcdef 1111 abcdef 1112 8888
3 abcdef 1111 abcdef 11128888
...
данных установлено, что я хочу
ex. New Data set
obs text
1 abcdef abcdef
2 abcdef abcdef 8888
3 abcdef abcdef 11128888
...
Примечание: Я только ищу, чтобы заменить 4 значные коды, проложенный с обеих сторон пространства. Таким образом, в obs 3 1112 не будет заменен.
Я пробовал выполнить следующий запрос proc sql, но он находит и заменяет первое совпадение, а не все совпадения.
proc sql;
select
*,
tranwrd(large_dataset.text, trim(small_dataset.code), ' ') as new_text
from large_dataset
left join small_dataset
on findw(large_dataset.text, trim(small_dataset.code))
;
quit;
Что вы пробовали до сих пор? Что вы хотите сделать, если столкнулись с чем-то вроде «abc111112abc», который имеет два совпадающих 4-значных кода, но может соответствовать только одному из них? Что, если у вас есть что-то вроде 'abc00111100abc', где у вас есть совпадение в середине пробега цифр? – user667489
@ user667489 Я отредактировал свой вопрос, чтобы я никогда не столкнулся с проблемой с двумя упомянутыми вами ситуациями. Я обновил свое оригинальное сообщение, чтобы включить то, что я пробовал делать. –
Имея всего 400 строк по 4 байта, вы можете создать регулярное выражение, чтобы заменить их на один вызов функции. Строковые переменные SAS ограничены 32 Кбайтами. – Tom