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
57
* Encoding: UTF-8.
* Convert 1st letter of each Word to Upper Case
* Version 2, revision 14.09.2017

* Thanks to A. Paul Beaulne for sending me this code.
* Also thanks to Joost Schouppe who suggested minor code correction to fix
  situations when no spaces found in address line.

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.

* Define 5 new string variables to hold the "pieces" of the
* address. You may need to define more if you know there are
* more separate words in the address.

STRING a1 TO a5 (A50).

* Use the DO REPEAT command to repeat the process for each
* "piece" of the address (each separate word, number, etc.).
* First find the location of the first space in the address.
* Then compute a substring which is the address variable up
* until the first space. This is stand-in variable a, which
* represents a "piece" of the address.
* Then shorten the address variable by making it a substring 
* of itself from the first space until the end. In other words,
* the address variable has the new "piece" trimmed from the
* front of it.
* Use the CONCAT and UPCASE functions to convert the first 
* character of the new "piece" you've created to upper case & 
* concatenate it back together with the remainder of the new 
* piece (the stand-in variable a).
* This sequence loops through 5 times. If you know you'll have
* more than 5 "pieces" in the address, define more than 5 
* variables, i.e., define strings a1 to a8, instead.

DO REPEAT a=a1 TO a5.
COMPUTE space=CHAR.INDEX(address," ").
IF space=0 space=LENGTH(address)+1. /* this avoides swalloing last/single word in a line, when no space found */
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.

* Now concatenate the pieces together into the new address 
* variable.  Use the RTRIM function to trim trailing blanks, and 
* insert single blanks where appropriate.

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

This is revised version, see original syntax here: 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