* (Вопрос) Какую можно предложить процедуру, чтобы создавать окончательную
* версию файла только в том случае, если 2 части файла (a и b), введённые отдельно, полностью совпадают?.
* (Ответ) Автор: Ray, 23.08.2002 (по email).

* Автор вопроса внёс следующие поправки в предложенный синтаксис:. 
* "В случае, если это кому-то из пользователей веб-сайта окажется полезным... Я добавил 
  три строки после последней команды END IF (начинаются командой TEMPORARY).  
  Их исполнение позволяет пользователю понять, где существуют различия между двумя
  файлами данных, чтобы проверить и скорректировать их. Если различий нет, там возникает
  ошибка, что не совсем красиво, но совершенно безобидно. 
  Tim Vaughn Salomons."

DATA LIST LIST /id q1a q2a q3a q4a q1b q2b q3b q4b.
BEGIN DATA
100 2 4 6 8 2 4 6 8
101 2 4 6 8 2 4 6 8
102 2 4 6 8 2 4 6 8
END DATA.
LIST.
* В этом файле части a и b совпадают.
SAVE OUTFILE='c:\\temp\\file1.sav'.


DATA LIST LIST /id q1a q2a q3a q4a q1b q2b q3b q4b.
BEGIN DATA
100 2 4 6 8 2 4 6 8
101 2 4 6 8 . 4 6 8
102 2 4 6 8 2 4 6 8
END DATA.
LIST.
* В этом файле части a и b не полностью совпадают (одно пропущенное значение).
SAVE OUTFILE='c:\\temp\\file2.sav'.


DATA LIST LIST /id q1a q2a q3a q4a q1b q2b q3b q4b.
BEGIN DATA
100 2 4 6 8 2 4 6 8
101 2 4 6 8 . . 6 8
102 2 4 6 8 2 4 6 8
END DATA.
LIST.
* В этом файле части a и b не полностью совпадают (2 пропущенных значения).
SAVE OUTFILE='c:\\temp\\file3.sav'.


DATA LIST LIST /id q1a q2a q3a q4a q1b q2b q3b q4b.
BEGIN DATA
100 2 4 6 8 2 8 8 8
101 2 4 6 8 2 4 6 8
102 2 4 6 8 2 4 6 8
END DATA.
LIST.
* В этом файле части a и b различаются.
SAVE OUTFILE='c:\\temp\\file4.sav'.


*///////////////.
DEFINE !test(!POS=!TOKENS(1))
GET FILE=!QUOTE(!CONCAT('c:\\temp\\',!1,'.sav')).
VECTOR a=q1a TO q4a /b=q1b TO q4b.
LOOP qnb=1 TO 4.
COMPUTE a=a(qnb).
COMPUTE b=b(qnb).
XSAVE OUTFILE='c:\\temp\\temp.sav' 
	/KEEP=id qnb a b.
END LOOP.
EXECUTE.

GET FILE='c:\\temp\\temp.sav' .
* nbdif будет содержать число различий.
COMPUTE nbdif=0.
DO IF NMISS(a,b)=1.
+	COMPUTE nbdif=1.
ELSE IF a<>b.
+	COMPUTE nbdif=1.
END IF.

TEMPORARY.
SELECT IF ( nbdif=1 ).      
REPORT FORMAT=list/var= id qnb a b.

COMPUTE nobreak=1.
AGGREGATE OUTFILE=*
	/BREAK=nobreak
	/nbdif=SUM(nbdif).
DO IF nbdif=0.
STRING fname1 fname2 (A15).
COMPUTE fname1=CONCAT(!QUOTE(!1),'.sav"').
COMPUTE fname2=CONCAT(!QUOTE(!1),' ok.sav"').
WRITE OUTFILE='c:\\temp\\syntax.sps' 
	/'GET FILE="c:\\temp\\'fname1
	/'SAVE OUTFILE="c:\\temp\\'fname2.
ELSE.
WRITE OUTFILE='c:\\temp\\syntax.sps' 
	/'* nothing to do.'.
END IF.
EXECUTE.
INCLUDE 'c:\\temp\\syntax.sps'. 

EXECUTE.
!ENDDEFINE.
*///////////////.

SET MPRINT=yes.
!test file1.
!test file2.
!test file3.
!test file4.