* Мой исходный файл данных содержит категориальную переменную, имеющую n различных значений. * Моя цель - разбить этот файл на n соответствующих файлов. * Решение. * Для начала создадим файл данных для примера. * Категориальная переменная cat1 в нём принимает 10 различных значений. * Синтаксис работает для любого числа любых значений переменной cat1. * Они не обязательно должны быть последовательными. * Автор: Raynald Levesque. NEW FILE. INPUT PROGRAM. LOOP id=1 TO 500. COMPUTE cat1=TRUNC(UNIFORM(10)). END CASE. END LOOP. END FILE. END INPUT PROGRAM. EXECUTE. SAVE OUTFILE='c:\\temp\\mydata.sav'. * Теперь начинаем обработку. set mprint=on. *//////////////////////////////////////////. DEFINE !SPLIT (var=!TOKENS(1) /value=!TOKENS(1) ). TEMPORARY. SELECT IF (!var=!value). SAVE OUTFILE=!QUOTE(!CONCAT('c:\\temp\\temp',!value,'.sav')). EXECUTE. !ENDDEFINE. *//////////////////////////////////////////. *Найдём все различные значения, которые принимает переменная cat1. AGGREGATE /OUTFILE=* /BREAK=cat1 /dummy = FIRST(id). FORMAT cat1(F8.0). * Запишем синтаксис, который будет вызывать макрос, определённый выше.. WRITE OUTFILE='c:\\temp\\temp.sps' / '!SPLIT var=cat1 value=' cat1 '.'. Execute. * Теперь загружаем исходный файл и автоматически разбиваем его на несколько файлов как и требовалось. GET FILE='c:\\temp\\mydata.sav'. INCLUDE 'C:\\temp\\temp.sps'.