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
* Замена отдельных символов в строке.

* Легко ли это? Поскольку в SPSS, как будто, отсутствует встроенная функция замены, 
  это требует довольно трудоёмкого вмешательства, особенно если в строке заменяемый символ
  встречается более одного раза.
* Я пришёл к следующему решению, которое успешно прошло испытания:
* Автор: Tim Dunsworth, размещено в SPSSX-L 10 апреля 2000 г.
* (в следующих примерах заменяем "&" на "/" - примеч. перев.).

DO IF (INDEX(cases,"&")>0).
LOOP.
COMPUTE cases = CONCAT(SUBSTR(cases,1,INDEX(cases,"&")-1),"/",
SUBSTR(cases,INDEX(cases,"&")+1,LENGTH(cases)-INDEX(cases,"&"))).
END LOOP IF (INDEX(cases,"&")=0).
END IF.
EXECUTE.


*------------------------------------------------------.
*Автор следующего решения: Tverdek Edward из SPSS.

* Пример данных.
DATA LIST /mystring 1-5 (A).
BEGIN DATA
&abcd
e&gh&
jk&mn
o&q&s
tuvw&
END DATA.

* Разносим исходную строку по нескольким переменным.
VECTOR x (5,A).
LOOP #i=1 TO 5.
COMPUTE x(#i)=SUBSTR(mystring,#i,1).
END LOOP.

* Перекодируем символы.
RECODE x1 TO x5 ('&'='/').

* Восстанавливаем строку из нескольких переменных.
STRING new (A5).
COMPUTE new=CONCAT(x1,x2,x3,x4,x5).
LIST.


************************************************.
* Следующее (неполное) решение предложено Hillel Vardi 11.04.2000 (требует добавления цикла).
compute II=INDEX(cases,"&")
DO IF II GT 0
COMPUTE SUBSTR(cases,II,1)="/"
END IF