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
* Encoding: UTF-8.
* Изменить первую букву каждого слова в адресе на заглавную.
* Версия 2, revision 14.09.2017

* Спасибо A. Paul Beaulne за этот код.
* Также спасибо Joost Schouppe за предложение изменить немного код, чтобы обработать
  ситуации, когда в строке не находится пробел.

DATA LIST  FIXED /address 1-50 (A).
BEGIN DATA.
248 n. delphia ave.
9273 Fairvew dr. apt 410
6324 Meadowview
corner of south & maine
oneWord

---
END DATA.

* Определим 5 новых строковых переменных чтобы размещать "куски" адреса.
* Вам может потребоватья большее количество переменных, если известно, что
* в адресах имеется большее количество отдельных слов.

STRING a1 TO a5 (A50).

* Используем цикл DO REPEAT для повтора вычислений для
* каждого отдельной части адреса (слова, номера).
* Сначал найдём положение первого пробела в адресе.
* Затем извлечём подстроку из адреса слева вплоть до первого пробела.
* Поместим результат в промежуточную переменную a (1, 2, ...). 
* Затем укоротим исходный адрес на только что извлечённую строку.
* Используем функции CONCAT и UPCASE для того, чтобы преобразовать 
* первый символ нового куска адреса в верхний регистр и сохранить
* результат в той же промежуточной переменной а (1, 2, ...).
* Эта последовательность по вторяется 5 раз. Если известно, что "кусков" адреса 
* будет больше, определите больше промежуточных переменных:  a1 to a8, например.

DO REPEAT a=a1 TO a5.
COMPUTE space=CHAR.INDEX(address," ").
IF space=0 space=LENGTH(address)+1. /* это исключает проглатывание единственного/последнего слова в адресе */
                                    /* из-за того, что очередной пробел не находится */
COMPUTE a=SUBSTR(address,1,space-1).
COMPUTE address=SUBSTR(address,space+1).
COMPUTE a=CONCAT(UPCASE(SUBSTR(a,1,1)),SUBSTR(a,2)).
END REPEAT PRINT.

* Теперь собираем части адреса в новый адрес. Используем функцию  RTRIM
* для отсечения замыкающих пробелов в частях адреса и вставляем
* пробелы там, где это надо.

COMPUTE address=CONCAT(RTRIM(a1)," ", RTRIM(a2)," ",RTRIM(a3)," ", RTRIM(a4)," ",RTRIM(a5)).
LIST variables=address.

Это исправленная версия, см. оригинал здесь: Convert first letter of each word to uppercase.

You may want also to check (more flexible) Python-based solution: Capitalize each word in a string variable