Изменение порядка текста в символьной строке в SAS?

#sas #character #text-manipulation

#sas #характер #обработка текста

Вопрос:

У меня есть набор данных с символьной переменной под названием «name». Он содержит полное имя человека следующим образом: «firstname среднее имя фамилия».

Я хочу, чтобы данные были переставлены так, чтобы они стали: «фамилия, имя, среднее имя».

Я не настолько разбираюсь в функциях SAS, но я использовал некоторые из немногих, которые я знаю.

(Мой код можно увидеть ниже).

В первой попытке (тест2) Я не получаю желаемого результата — я получаю: «Фамилия, имя отчество», а не «Фамилия, имя отчество» — моя проблема в запятой.

Поэтому я подумал, что смогу решить свою проблему, создав новую переменную last name, содержащую запятую в конце (в test2_new ). Но я не получаю того, чего хочу? SAS поставил три точки в конце, а не запятую?

Я надеюсь, что человек, обладающий большими навыками SAS, чем я, сможет ответить на мой вопрос??

С уважением, Мария введите описание изображения здесь

Ответ №1:

данные имеют ;
 введите @ 1 текст и 64 доллара. ;
строки данных ;
Сьюзан Смит
Дэвид Джеймсон
Брюс Томас Форсайт
;
выполнить ;

данные нужны ;
 набор имеет ;
 lastname = scan(текст, -1,' ') ;
 firstnames = substr(текст, 1,длина (текст)-длина (фамилия)) ;
 newname = catx(', ',фамилия, имена) ;
выполнить ;

Что дает

текст фамилия имя отчество новое имя

Сьюзан Смит Смит Сьюзан Смит, Сьюзан
Дэвид Джеймсон Джеймсон Дэвид Джеймсон, Дэвид
Брюс Томас Форсайт Форсайт Брюс Томас Форсайт, Брюс Томас

Комментарии:

1. Спасибо за ответ. Но этот метод не работает, когда у вас есть переменная MiddleName? Я думаю, тогда новое имя будет: Форсайт, Брюс, Томас?

2. Исходя из вашего исходного сообщения, вам не нужна явная переменная middlename, просто чтобы изменить одну строку в формате ‘first [middle] last’ на ‘last, first [middle]’. Этот метод работает для любого количества средних имен, начиная с нуля.

3. Ах, хорошо. Спасибо за ответ — это было очень полезно!

Ответ №2:

Выражения PERL здесь являются полезным инструментом, особенно PRXCHANGE. Веб-сайт поддержки SAS предоставляет хороший пример того, как поменять местами имя и фамилию, вот небольшая модификация этого кода. Я обслуживал только людей с 2 или 3 именами, но при необходимости это должно быть довольно просто расширить. Мой код основан на наборе данных, созданном в ответе от @Chris J.

 data want;
set have;
if countw(text)=2 then text = prxchange('s/(w ) (w )/$2, $1/', -1, text);
else if countw(text)=3 then text = prxchange('s/(w ) (w ) (w )/$3, $1 $2/', -1, text);
run;