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
* Это универсальная процедура сравнения 2-х файлов, например, до и после проверки и чистки,
* или файлов, введённых разными операторами, или промежуточных файлов с окончательными версиями и т.д.
* По каждой переменной он выдаёт перечень различий.
* Результат похож на результат аналогичной процедуры в STATA (cf3).
* Успехов! Simon.

/* Сравннение двух файлов и протокол различий */ 
/* Автор: Simon Freidin, 09.05.2006 */ 
/* Наблюдения сопоставляются по их значениям ID */ 
/* Выдача организуется по переменным */ 
/* Типичный пример выдачи: */ 
/* ID var1_old (прежнее знач.) var1_new (новое знач.)*/ 
/* */ 
/* 32747 3 2 */ 
/* 32676 4 5 */ 
/* 36472 2 3 */ 
/* 47699 5 4 */

set printback=no mprint=no length=none.

file handle oldfile /name='укажите путь и имя старой версии файла данных'. 
file handle newfile /name='укажите путь и имя новой версии файла данных'.

define checkvar (!pos=!tokens(1)). 
match files file=oldfile /rename= (!1=!concat(!1,'_old')) /in=inold 
  /file=newfile /rename= (!1=!concat(!1,'_new')) /in=innew 
  /keep=!concat(!1,'_old') !concat(!1,'_new') ID 
  /by ID. 
sel if inold and innew. 
/* Выбираем наблюдения, присутствующие в обоих файлах */ 
display labels var=!concat(!1,'_new'). 
sel if !concat(!1,'_old') ne !concat(!1,'_new'). 
list /ID !concat(!1,'_old') !concat(!1,'_new'). 
!enddefine.

/* Укажите в подкоманде drop переменную ID и все другие переменные, по которым вы не хотите
/* проводить сравнение, либо которые просто отсутствуют в новом файле данных */ 
get file=oldfile /drop= ID . 
n of cases 1. 
oms /destination viewer=no. 
flip. 
omsend. 
write outfile="c:\\temp\\checkvar.sps"/"checkvar " case_lbl ".". 
exe. 
include "c:\\temp\\checkvar.sps".