Как разбить комбинацию цифр и символов на несколько столбцов - PullRequest
1 голос
/ 23 сентября 2019

Я хочу разделить некоторую переменную «15to16» на два столбца, где для этой строки мне нужны значения 15 и 16 в каждой из записей столбца.Следовательно, я хочу получить от этого

+-------------+
|   change    |   
+-------------+
| 15to16      | 
| 9to8        | 
| 6to5        | 
| 10to16      | 
+-------------+

этого

+-------------+-----------+-----------+
|   change    |   from    |   to      |
+-------------+-----------+-----------+
| 15to16      | 15        |     16    |
| 9to8        | 9         |     8     |
| 6to5        | 6         |     5     |
| 10to16      | 10        |     16    |
+-------------+-----------+-----------+

Может ли кто-нибудь мне помочь?Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 23 сентября 2019
data have;
input change $;
cards;
15to16
9to8
6to5
10to16
;
run;

data want;
  set have;
  from = input(scan(change,1,'to'), 8.);
  to = input(scan(change,2,'to'), 8.);
run;

Примечание: в этом случае функция scan использует и t, и o в качестве отдельных разделителей, а не ищет слово to.Этот подход все еще работает, потому что scan по умолчанию обрабатывает несколько последовательных разделителей как один разделитель.

2 голосов
/ 23 сентября 2019

Регулярные выражения с метасимволом () определяют группы, содержимое которых можно извлечь из буферов захвата с помощью PRXPOSN.Буферы захвата, полученные в этом случае, будут иметь один или несколько последовательных десятичных знаков (\d+) и преобразованы в числовое значение с помощью INPUT

data have;
input change $20.; datalines;
15to16
9to8  
6to5  
10to16
run;

data want;
  set have;

  rx = prxparse('/^\s*(\d+)\s*to\s*(\d+)\s*$/');

  if prxmatch (rx, change) then do;
    from = input(prxposn(rx,1,change), 12.);
    to   = input(prxposn(rx,2,change), 12.);
  end;

  drop rx;
run;
0 голосов
/ 24 сентября 2019

Вы можете получить желаемый ответ, объявив разделитель при создании набора данных.Однако вы не предоставили достаточно информации о других ваших переменных и о том, как вы их импортируете

Data want;
INFILE datalines DELIMITER='to';
INPUT from to;
datalines; 
15to16
9to8
6to5
10to16
;
Run;
...