* Данный синтаксис иллюстрирует метод условного исполнения какого-то внешнего файла синтаксиса INCLUDE), т.е. при некоторых условиях, которым удовлетворяют данные. * Такая возможность полезна, если вы имеете для исполнения 1. большой файл синтаксиса, который выполняется долго; 2. синтакс выполняется на самых разных файлах данных; 3. в зависимости от наличия или отсутствия некоторых данных крупные куски синтаксиса становятся бесполезными и в их выполнении нет необходимости. * Автор: Raynald Levesque, rlevesque@videotron.ca. Во-первых ,сохраните следующие 2 файла: *--------------Сохранить как "c:\\temp\\syntax when NO 88.sps"-----------. ************. * Этот синтаксис будет исполняться когда в данных нет значений, равных 88. * Ничего не делаем. *------------------------------------------------------------. *--------------Сохранить как "c:\\temp\\syntax when 88.sps"-----------. ************. * Этот синтаксис будет исполняться когда в данных есть значения, равные 88. FREQ VAR=M1R25REC. *------------------------------------------------------------. Теперь запустите следующий синтаксис. * Создаём 2 разных набора данных для примера. DATA LIST FREE /M1R25REC. BEGIN DATA 25 12 41 52 45 88 25 88 21 88 251 4 2 41 52 END DATA. LIST. SAVE OUTFILE='c:\\temp\\mydata1.sav'. DATA LIST FREE /M1R25REC. BEGIN DATA 25 12 41 52 45 44 25 45 21 46 251 4 2 41 52 END DATA. LIST. SAVE OUTFILE='c:\\temp\\mydata2.sav'. * Откроем файл, где есть значения, равные 88, чтобы показать, что запускается нужный файл синтаксиса. GET FILE='c:\\temp\\mydata1.sav'. COMPUTE testvar=(M1R25REC EQ 88). COMPUTE dummy=1. AGGREGATE /OUTFILE='C:\\temp\\AGGR.SAV' /BREAK=dummy /nbcases = SUM(testvar). MATCH FILES /FILE=* /TABLE='C:\\temp\\AGGR.SAV' /BY dummy. DO IF $CASENUM=1 & nbcases=0. WRITE OUTFILE='c:\\temp\\mysyntax.sps' /"INCLUDE FILE='c:\\temp\\syntax when NO 88.sps.'". ELSE IF $CASENUM=1 & nbcases>0. WRITE OUTFILE='c:\\temp\\mysyntax.sps' /"INCLUDE FILE='c:\\temp\\syntax when 88.sps.'". END IF. EXECUTE. GET FILE='c:\\temp\\mydata1.sav'. INCLUDE FILE='c:\\temp\\mysyntax.sps'. * Дальше можно выполнять нужные вам остальные преобразования. *######## Проиллюстрируем работу, когда в данных нет значений, равных 88. GET FILE='c:\\temp\\mydata2.sav'. COMPUTE testvar=(M1R25REC EQ 88). COMPUTE dummy=1. AGGREGATE /OUTFILE='C:\\temp\\AGGR.SAV' /BREAK=dummy /nbcases = SUM(testvar). MATCH FILES /FILE=* /TABLE='C:\\temp\\AGGR.SAV' /BY dummy. DO IF $CASENUM=1 & nbcases=0. WRITE OUTFILE='c:\\temp\\mysyntax.sps' /"INCLUDE FILE='c:\\temp\\syntax when NO 88.sps.'". ELSE IF $CASENUM=1 & nbcases>0. WRITE OUTFILE='c:\\temp\\mysyntax.sps' /"INCLUDE FILE='c:\\temp\\syntax when 88.sps.'". END IF. EXECUTE. GET FILE='c:\\temp\\mydata2.sav'. INCLUDE FILE='c:\\temp\\mysyntax.sps'. * Дальше можно выполнять нужные вам остальные преобразования.