Запись пропущенных значений как точек в текстовый файл
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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | Решение SPSS AnswerNet Код решения: 100000572 ПО: SPSS Base Тема: Запись файла ASCII с отображением пропущенных значений точками. Описание: Вопрос. Мне требуется экспортировать данные в ASCII-файл, записав туда пропущенные значения как точки. Я пытаюсь использовать команду WRITE, но всегда получаю пробелы вместо точек. И когда я пытаюсь читать эти данные другой программой, возникают ошибки. Ещё мне бы надо создать ASCII-файл, куда записать имена всех переменных из SPSS. Ответ. Во-первых, проверьте, не может ли другое приложение импортировать табулированные файлы, где встречаются пробелы. Если может, задача упрощается: можно использовать следующий код * ДОПУСТИМ, ЧТО ФАЙЛ ДАННЫХ ОТКРЫТ, АКТИВЕН, А ВСЕ ПЕРЕМЕННЫЕ ЯВЛЯЮТСЯ ЧИСЛОВЫМИ *. * Сделаем резервную копию файла данных * . SAVE OUTFILE 'TMP.SAV'. * Заменим все пропуски, определённые пользователем на системные пропуски SYSMIS *. RECODE ALL (MISSING=SYSMIS). SAVE TRANSLATE OUTFILE 'c:\\temp\\ddd.txt'/TYPE=TAB /REPLACE. SELECT IF $CASENUM=1. FLIP . WRITE OUTFILE 'SPSS.TI' / CASE_LBL. EXECUTE. GET FILE 'TMP.SAV'. В случае, если другое приложение не принимает табулированные файлы, задача чуть более сложна, но разрешима. Идея - конвертировать все переменные в строки, а затем заменить пустые строки точками перед экспортом данных. Простейший способ, известный мне - это использовать SPSS для записи синтаксиса, осуществляющего преобразования, а затем - использовать сам синтаксис для выполнения преобразований. Суть формируемого синтаксиса - создать (командой COMPUTE) строковые переменные из числовых, затем убрать исходные переменные и дать строковым переменным имена исходных. Можно также применить строковый шаблон, а затем - экспортировать данные в текстовый файл (после замены пробелов на точки). * Резервируем исходные данные * . SAVE OUTFILE 'TMP.SAV'. * Получаем файл с именами переменных * . SELECT IF $CASENUM=1. FLIP. COMPUTE =1. COMPUTE ID=$CASENUM. STRING NEW (A8). COMPUTE NEW=CONCAT('VAR',STRING(ID,N5)). * Tag first and last variables for special processing *. MATCH FILES FILE * / LAST= BOT /FIRST=TOP / BY . * Generate a set of compute statements to change numerics to strings *. WRITE OUTFILE 'MCR0.TMP'/'STRING ',NEW, '(A8)'/ 'COMPUTE ',NEW,'=STRING(',CASE_LBL,',F8.4)' . * Generate a DROP statement *. DO IF TOP. WRITE OUTFILE 'MCR1.TMP' / 'MATCH FILES / FILE=* /DROP'. END IF. WRITE OUTFILE 'MCR1.TMP' /' ',CASE_LBL. * Generate a rename statement *. WRITE OUTFILE 'MCR2.TMP'/ 'RENAME VARIABLES ('NEW,'=',CASE_LBL,')'. * Generate file with variable names file *. WRITE OUTFILE 'SPSS.TI' / CASE_LBL. DO IF BOT. WRITE OUTFILE 'MCR2.TMP' /"WRITE OUTFILE 'SPSS.DA'/ALL (",ID (F3.0),'(A8,X))'. END IF. EXECUTE. GET FILE 'TMP.SAV'. RECODE ALL (MISSING=SYSMIS). INCLUDE 'MCR0.TMP'. INCLUDE 'MCR1.TMP'. RECODE ALL (' '='.'). INCLUDE 'MCR2.TMP'. EXECUTE. GET FILE 'TMP.SAV'. ERASE FILE 'MCR0.TMP'. ERASE FILE 'MCR1.TMP'. ERASE FILE 'MCR2.TMP'. |
Related pages
...