< Сильный > Ввод :
David30Miller
Jhonty45Rhodes
Ahsley63Cummins
Таким образом, переменная имени должна содержать символ до возраста, т.е. Дэвид Эйдж должен содержать число, т.е. 30, а фамилия должна содержать Миллера.
Требуемый результат:
FirstName Age Last name
David 30 Miller
Jhonty 45 Rhodes
Ahsley 63 Cummins
Может кто-нибудь помочь?
2 ответа
Шаг 1: извлеките возраст, используя compress (string ,, "kd") (где kd сжимает все значения символов, оставляя нас с возрастом)
Шаг 2: использование возраста в качестве параметра для функции сканирования для создания имени и фамилии. scan (,,): первый параметр - это значение, с которым вы хотите работать, второй параметр - это какая часть строки вы хотите извлечь, а третий параметр - какой символ используется для дифференцирования (возраст) в этом случае.
data abc;
input string $50.;
cards;
David30Miller
Jhonty45Rhodes
Ahsley63Cummins
;
run;
data abc;
set abc;
age = input(compress(string,,"kd"),best.);
first_name =scan(string,1,age); /*or scan(string,1,,"d");*/
last_name = scan(string,2,age); /*or scan(string,2,,"d");*/
run;
Мой выход.
|string |age |first_name |last_name
|David30Miller |30 |David |Miller
|Jhonty45Rhodes |45 |Jhonty |Rhodes
|Ahsley63Cummins |63 |Ahsley |Cummins
Дайте мне знать в случае каких-либо запросов
Вы также можете использовать Prxchange, как показано ниже. Ниже приводится краткое обсуждение кода.
^([a-z]+)([0-9]+)([a-z]+)$ --- ^ means starting ^([a-z]+) this is group1 with
alphabets
([0-9]+) is group2 with numbers only
([a-z]+)$ is group3.
$1 represents group1 which can replace everything with group 1 by using /$1/
$2 represents group1 which can replace everything with group 2 by using /$2/
$3 represents group1 which can replace everything with group 3 by using /$3/
В первом сценарии мы заменяем все на группу, которая дает ваше имя и так далее.
data want
set have;
firstname = prxchange('s/^([a-z]+)([0-9]+)([a-z]+)$/$1/i',1,trim(string));
age = input(prxchange('s/^([a-z]+)([0-9]+)([a-z]+)$/$2/i',2,trim(string)),8.);;
lastname = prxchange('s/^([a-z]+)([0-9]+)([a-z]+)$/$3/i',1,trim(string));;
run;
Похожие вопросы
Новые вопросы
sas
Язык SAS - это 4GL, который лежит в основе системы SAS, набора продуктов, сосредоточенных вокруг обработки данных и статистических процедур. При возникновении вопросов о коде, пожалуйста, включите ваш код и некоторые данные, чтобы воспроизвести вашу проблему, либо в выражениях линий данных / карточек, либо с помощью набора данных sashelp, например sashelp.class или sashelp.cars.