* (Вопрос) Какую можно предложить процедуру, чтобы создавать окончательную * версию файла только в том случае, если 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.