Это пример синтаксиса, который вызывает скрипт, рассчитывающий расстояние Левенштейна. Сам скрипт здесь: Levenshtein Distance between 2 strings.

 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
* Пример использования алгоритма расчёта расстояния Левенштейна.

DATA LIST LIST /s1 s2(2 A20).
BEGIN DATA
'Asdfghggfda'   'fasdfasdfasd'
'Agoirjvofid'       'Bsdfghggfda' 
'Dfuu9weroffg'   'Dfuu8weroffg' 
'Dfdagfsdfgd'     'dfsadf a f  afdas'
'Fdsafd asdfas'   'poihjuijioujoi'
'fadadf dafda'   'fBCadf dafda' 
'Adafdghfgdf a'  'foiugfyy7pouihiuh'
END DATA.

COMPUTE casenb=$CASENUM.
XSAVE OUTFILE='c:\\temp\\main data file.sav'.

* Определим макрос, содержащий число наблюдений.

COMPUTE nobreak=1.
AGGREGATE OUTFILE=*
	/PRESORTED
	/BREAK=nobreak
	/N=n.
WRITE OUTFILE='c:\\temp\\nb cases.sps' /'DEFINE !nb()'n(F10.9)'!ENDDEFINE.'.
EXECUTE.
INCLUDE 'c:\\temp\\nb cases.sps'.


GET FILE='c:\\temp\\main data file.sav'.
RENAME VARIABLE (casenb=cases1).
* Создаём файл, который будет содержать все комбинации строк s1 и s2.
LOOP #cnt=1 TO !nb.
- XSAVE OUTFILE='c:\\temp\\expands1.sav' /KEEP=s1 cases1.
END LOOP.
EXECUTE.

GET FILE='c:\\temp\\main data file.sav'.
LOOP cnt=1 TO !nb.
- XSAVE OUTFILE='c:\\temp\\expands2.sav' /KEEP=s2 casenb cnt.
END LOOP.
EXECUTE.

GET FILE='c:\\temp\\expands2.sav' .
SORT CASES BY cnt casenb.
MATCH FILES FILE=*
	/FILE='c:\\temp\\expands1.sav'
	/DROP=cnt.
SAVE OUTFILE='c:\\temp\\expanded file.sav'.

GET FILE='c:\\temp\\expanded file.sav' /KEEP=s1 s2 cases1 casenb.

ЗДЕСЬ ОСТАНАВЛИВАЕМСЯ.

Запускаем скрипт.

И лишь после этого выполняем оставшуюся часть синтаксиса.

51
52
53
54
55
56
57
58
59
DATA LIST FILE='c:\\temp\\distances.txt' LIST /d.
MATCH FILES FILE='c:\\temp\\expanded file.sav'
	/FILE=*.
SORT CASES BY s1 d.
AGGREGATE OUTFILE=*
	/PRESORTED
	/BREAK=s1
	/s2=FIRST(s2) /d=FIRST(d) /cases1=FIRST(cases1).
SORT CASES BY cases1.