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
58
59
60
61
62
63
64
65
66
* Преобразование данных из "узкого" вида в "широкий" при наличии текстовых значений.
* Автор кода: Raynald Levesque.

DATA LIST fixed records = 1/1 seg 1-2 (f) state 3-4 (f)
ori 5-13 (a) inum 14-25 (a) idate 26-33 (f) offcode 34-36 (a) a_c 37 (a) susp1 38 (a) susp2 39 (a) susp3 40 (a)
loc 41-42 (f) enter 43-44 (f) method 45 (a) tyact1 46 (a) tyact2 47 (a) tyact3 48 (a)
weap1 49-51 (a) weap2 53-54 (a) weap3 55-57 (a) bias 58-59 (f). 

BEGIN DATA.
0133ori_ori__inum_inum___10311999of1astu1234mtuvwea wewea22
0133ori_ori__inum_inum___11311999of2bstu1234mtuvwea wewea22
0133ori_ori__inum_inum___12151999of3cstu1234mtuvwea wewea22
0133ori_ori__inum_inum___12291999of4dstu1234mtuvwea wewea22
0133ori2ori__inum_inum___10311999of5estu1234mtuvwea wewea22
0133ori2ori__inum_inum___11011999of6fstu1234mtuvwea wewea22
END DATA.
LIST. 

*Сформируем идентификатор уникальных записей.
* (записи с одинаковыми значениями переменных seg, state, ori, inum получают одинаковый идентификатор).
STRING id(A23).
COMPUTE id=CONCAT(STRING(seg,F2),STRING(state,F2),ori,inum).
SORT CASES BY id. 

* Пронумеруем уникальные записи.
DO IF $casenum=1.
COMPUTE recno=1.
ELSE.
COMPUTE recno=(lag(id)=id)*lag(recno)+1.
END IF. 

* Следующая строка подразумевает, что вам нужно, скажем, объединить "вширь" информацию максимум о 3 записях с одинаковым id.
SELECT IF (recno<4). 

* Единственная причина создания числовых переменных ниже - возможность вставки их одна к одной и, как следствие, возможность
  адресации их через ключевое слово TO в команде
  AGGREGATE впоследствии (т.е. в принципе, числовые переменные заранее можно не объявлять).
* добавьте сюда нужные переменные, которые также нужно сохранить. 
NUMERIC idate1 TO idate3.
STRING offcode1 TO offcode3(A3) a_c1 TO a_c3(A1).
DO IF recno=1.
COMPUTE idate_1=idate.
COMPUTE offcode1=offcode.
COMPUTE a_c1=a_c. 

* добавьте сюда нужные переменные, которые также нужно сохранить.
ELSE IF recno=2.
COMPUTE idate_2=idate.
COMPUTE offcode2=offcode.
COMPUTE a_c2=a_c. 

* добавьте сюда нужные переменные, которые также нужно сохранить.
ELSE.
COMPUTE idate_3=idate.
COMPUTE offcode3=offcode.
COMPUTE a_c3=a_c. 
* you have to add the missing variables.
END IF. 

* добавьте сюда нужные переменные, которые также нужно сохранить в конец команды AGGREGATE. 
AGGREGATE
/OUTFILE=*
/BREAK=id
/ idate_1 TO idate_3=MAX(idate_1 TO idate_3) 
/offcode1 TO offcode3=MAX(offcode1 TO offcode3)
/a_c1 TO a_c3=MAX(a_c1 TO a_c3).