Расщепить большой файл на несколько файлов по категориям строковой переменной
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 | * Исходный файл содержит переменную cat1 типа STRING(A2), у которой есть n различных значений. * Цель - создать n соответствующих файлов. * Синтаксис сначала создаёт пример данных. * Вообще он работает с любым числом любых значений переменной cat1. * Автор: Raynald Levesque. Размещено в SPSSX-L 09.08.2001. * Модификация от 24.01.2003. DATA LIST FREE /cat1(A2). BEGIN DATA "A2" "B7" "01" "08" "W7" "XY" "A2" "A2" "08" "W7" "W7" "XY" "A2" "B7" "01" "08" "W7" "XY" END DATA. LIST. 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\\f',!UNQUOTE(!value),'.sav')). EXECUTE. !ENDDEFINE. *//////////////////////////////////////////. * Определим перечень уникальных значений переменной cat1. AGGREGATE /OUTFILE=* /BREAK=cat1 /notused = N. * Запишем синтаксис, который вызовет макрос, заданный выше. WRITE OUTFILE='c:\\temp\\temp.sps' /'!SPLIT var=cat1 value="' cat1 '".'. Execute. * Загрузим исходный файл данных и вызовем макрос для его обработки (расщепления на n файлов). GET FILE='c:\\temp\\mydata.sav'. INCLUDE 'C:\\temp\\temp.sps'. |