Я сделал набор данных в SAS, который читает текстовый файл по строкам. Поэтому, читая эти строки в моем наборе данных, я хочу исключить специальные символы, такие как *,%, -,; от начала и конца этой конкретной линии. какую функцию я должен использовать? Символы могут встречаться в любой последовательности, и я должен заменить их пробелом. Пожалуйста, помогите!Заменить специальные символы в SAS
ответ
Пожалуйста, взгляните на функцию перевода в sas. первый аргумент - ваша переменная, второй аргумент пуст (термин, который у вас есть), третий аргумент - это список всех ваших специальных символов, которые необходимо заменить вторым параметром.
перевод (переменная, '', '*% -');
Я хочу заменить эти персонажи только с самого начала и конца, но нигде в середине. – Aditi
data forAditi;
infile datalines truncover;
format aLine translated parced $80.;
input @1 aLine $char80.;
** Старая функция перевода в школу выполняет хорошую работу, но также переводит персонажей в середине **;
translated = translate(aLine,' ','* % - ;');
** Поэтому вы можете предпочесть регулярные выражения **;
retain prx_nr;
if _N_ EQ 1 then prx_nr = prxparse('/[ *%-;]*(.+[^ *%-;])/') ;
match = prxmatch(prx_nr, aLine);
call prxposn(prx_nr, 1, pos, len);
substr(parced,pos) = prxposn(prx_nr, 1, aLine);
** [ *%-;]*
ищет ноль или более специальных символов, .+
ищет 1 или более символов, что так всегда и [^ *%-;]
выглядит для любого не особый характер. prxmatch будет искать максимально возможное совпадение, поэтому начиная с первого символа, специального или нет, и заканчивая последним неспецифическим символом. prxposn, однако, установить позы ition и Len GTH к части матча, заключенный в (...)
, то есть от первого специального символа, не до конца. Теперь, используя тот факт, что SAS повторно инициализирует все свои переменные, если явно не сохранено, нам просто нужно скопировать эту часть в нужное положение в parced
**;
datalines4;
This is text;
--That should be cleaned up,
And here- you have *% special characters in the middle.
Blanks at the start should be preserved. Right?
;;;;
run;
Вы можете использовать функцию compress
для удаления специальных символов, либо с помощью определенного списка символов, или опция «р» (удалить все знаки препинания/специальные символы). Для того, чтобы убедиться, что они удаляются только в начале/конце, а также использовать substr
:
/* Assuming 'text' is always 3 or more characters */ data want ; set have ; strStart = substr(text,1,1) ; strEnd = substr(text,length(text),1) ; strMid = substr(text,2,length(text)-2) ; newStart = compress(strStart,,'p') ; /* remove all non-alphanumeric */ newEnd = compress(strEnd ,,'p') ; newStr = cats(newStart,strMid,newEnd) ; run ;
Вы могли бы объединить все эти операции в одной инструкции.
Что делать, если такой символ встречается посредине линии? –
Нет, я просто хочу удалить с начала и конца. – Aditi
Не могли бы вы разместить пример набора данных? Естественное выражение - путь вперед. –