Расщепить большой файл на несколько файлов по категориям
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 46 | * Мой исходный файл данных содержит категориальную переменную, имеющую 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'. |