1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
* Упражнение по преобразованию строк.
* Замена / удаление определённых символов в строках, объединение строк.
* Raynald Levesque.

* Создадим фиктивный массив данных.
DATA LIST FIXED /name 1-25 (A).
BEGIN DATA
000John Doe /10.14.12
0Mary Poppins /17.21
Billy Joe /21.25
000000Peter Pan /10.35
END DATA.
LIST.

* Определим имена и метки переменных, которые будут содержать "исправленные" строки.
STRING name1 TO name4 (A25).
VARIABLE LABELS name 'Исходное значение' 
    name1 'Без головных нулей' 
    name2 'Замена . на ,' 
    name3 'Удалено все до "/" включительно' 
    name4 'Удалено все после "/" включительно'.

* 1. Чтобы удалить головные нули.
COMPUTE name1=LTRIM(name,"0").
LIST name name1.

* 2. Чтобы заменить точки "." на запятые ",".
COMPUTE name2=name1.
* Цикл позволяет "пробежать" по всем символам строки.
* Знак "+" обеспечивает работоспособность кода в случае использования команды INCLUDE.
LOOP IF INDEX(name2,".")>0.
+ COMPUTE SUBSTR(name2,INDEX(name2,"."),1)=",".
END LOOP.
LIST name1 name2.

* 3. Чтобы удалить "/" и всё, что левее.
COMPUTE name3=SUBSTR(name1,INDEX(name1,"/")+1).
LIST name1 name3.

* 4. Чтобы удалить "/" и всё, что правее.
COMPUTE name4=SUBSTR(name1,1,INDEX(name1,"/")-1).
LIST name1 name4.

* 5. Чтобы объединить строки str1 и str2.
STRING str1 str2 str3 str4 (A2).
COMPUTE str1="A".
COMPUTE str2="B".
*------- Обратите внимание, это бы НЕ сработало.
COMPUTE str3=CONCAT(str1,str2).
* Это бы не сработало, поскольку, фактически, str1 равно A с пробелом справа. 
* Аналогично, str2 равна B с пробелом справа.
* Поэтому CONCAT(str1, str2) даст строку из 4 символов "A B ", которая усечётся до 2 символов
  "A " чтобы "влезть" в двухсимвольный формат переменной str3, заданный выше.
*------- Это БУДЕТ работать.
COMPUTE str4=CONCAT(RTRIM(str1),str2).
LIST str1 str2 str3 str4.