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
*(Вопрос)  У меня проблема с командой CONCAT. Я использую следующий код:

NEW FILE.
DATA LIST LIST /id .
BEGIN DATA
1
2
END DATA.

STRING v1 v2 v3 (A10).
COMPUTE v1 = "a".
COMPUTE v2 = CONCAT(v1,"b").
COMPUTE v3 = CONCAT("c",v1).
EXECUTE.

Мне хотелось сцепить два строковых выражения в новую переменную, однако,
в том случае, если первым аргументом в функции выступает переменная, то метод
не работает.Результат в редакторе данных был следующим:

id       v1   v2   v3
1,00    a     a   ca
2,00    a     a   ca

но мне казалось, он должен быть таким:

 id       v1   v2   v3
1,00    a    ab   ca
2,00    a    ab   ca


*(Ответ) Размещён в SPSS-X 6.3.2004. Автор: Raynald Levesque.

Это ожидаемое поведение.

Переменные v1 и v2 имеют формат A10.
Поэтому результат
CONCAT(v1,"b") есть 10 символов переменной v1 (последние 9 из которых есть пробелы),
и затем символ "b".

Другими словами, результат конкатенации CONCAT(v1,"b") имеет 11 символов.
Поскольку v2 имеет емкость лишь для 10, команда
COMPUTE v2=CONCAT(v1,"b").
присваивает первые 10 символов слева переменной v2.

Решением будет использовать следующее:
COMPUTE v2=CONCAT(RTRIM(v1),"b").

Функция RTRIM убирает замыкающие пробелы справа у переменной v1. Результирующая
строка (после сцепления с "b") имеет длину лишь в 2 символа, которые и помещаются в v2.