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
*(Вопрос) Теперь мне надо найти часть строки, которая относится к имени, 
* и часть, которая относится к адресу. Например:
	"Bloggs J 10 Smith St" должна быть разбита по 2 переменным, 
	"Bloggs J" и "10 Smith St".

*(Ответ) Размещён в SPSSX-L 25.7.2002. Автор: Raynald Levesque.

******************.
* Вот первый способ.
******************.
DATA LIST FIXED /str1 1-25 (A).
BEGIN DATA
Bloggs J 10 Smith St
Bloggs John 12 Smith St
END DATA.
LIST.

VECTOR nb(25F2).
LOOP cnt=1 TO 25.
COMPUTE nb(cnt)=cnt*(1-NMISS(NUMBER(SUBSTR(str1,cnt,1),F1))).
END LOOP.
LOOP cnt=1 TO 25.
IF nb(cnt)=0 nb(cnt)=$SYSMIS.
END LOOP.
COMPUTE pos=MIN(nb1 TO nb25).

STRING addr(A25).
COMPUTE addr=SUBSTR(str1,pos).

*Убираем лишнее.
ADD FILES FILE=* /DROP=pos nb1 TO nb25 cnt.


**************.
*А вот более эффективный способ.
**************.
DATA LIST FIXED /str1 1-25 (A).
BEGIN DATA
Bloggs J 10 Smith St
Bloggs John 12 Smith St
END DATA.
LIST.

LOOP #cnt=1 TO 25.
END LOOP IF #cnt*(1-NMISS(NUMBER(SUBSTR(str1,#cnt),F1)))>0.

STRING addr(A25).
COMPUTE addr=SUBSTR(str1,#cnt).
EXECUTE.