< Сильный > Ввод :

David30Miller   
Jhonty45Rhodes  
Ahsley63Cummins

Таким образом, переменная имени должна содержать символ до возраста, т.е. Дэвид Эйдж должен содержать число, т.е. 30, а фамилия должна содержать Миллера.

Требуемый результат:

FirstName Age Last name  
David     30  Miller 
Jhonty    45  Rhodes  
Ahsley    63  Cummins

Может кто-нибудь помочь?

sas
-1
neer 24 Апр 2017 в 21:30

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

Дайте мне знать в случае каких-либо запросов

2
G.Arima 24 Апр 2017 в 19:34

Вы также можете использовать 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;
0
Kiran 14 Окт 2018 в 13:09