Импорт данных с идущими подряд запятыми-разделителями
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 | * Импорт данных с идущими подряд запятыми-разделителями. Решение SPSS AnswerNet Код: 100000524 ПО: SPSS Base Тема: Команда DATA LIST FREE с запятыми Описание: Вопрос. Я пользуюсь SPSS 8.0 for Windows. В документации к команде DATA LIST я заметил, что множественные запятые не интерпретируются командой как разделители множества значений. Если в данных пропущенные значения просто опущены, команда DATA LIST с ключевым словом FREE прочтёт данные неверно. Проблема может быть решена с использованием ключевого слова LIST, однако у меня очень много пропущенных данных, так что обойтись этой командой будет непросто. Есть способ как-то решить проблему? Ответ. Такая проблема возникает, если данные структурированы таким образом, что две идущие подряд запятые символизируют одно пропущенное значение, 3 идущие подряд запятые - 2 пропуска и т.д. Идея решения заключается в том, чтобы прочесть данные сначала целиком в одну строковую переменную, а затем - "разрезать" её на нужное число переменных, учитывая специфику. **** ОГРАНИЧЕНИЯ: 1. Запятые не должны появляться в данных в ином качестве, кроме как разделители. 2. Программа потребует модификации, если длина читаемых записей превышает 80 символов (данные должны быть помещены во внешний файл). 3. Если записи длиннее 255 символов, потребуется прочесть их в несколько строковых переменных с последующей обработкой каждой из них. 4. ИЗМЕНИТЕ программу, чтобы она соответствовала числу переменных, имеющихся в вашем КОНКРЕТНОМ случае. 5. Все значения, относящиеся к одному и тому же наблюдению, должны располагаться в одной и той же строке. DATA LIST / X 1-80 (A) . BEGIN DATA 1,1,6 2, ,5 3,2,3 end data . VECTOR NX(3,a8) . COMPUTE #VAR=0 . LOOP . COMPUTE #VAR = #VAR + 1 . COMPUTE #START = INDEX(X,',') . COMPUTE NX(#VAR) = RTRIM(RTRIM(LTRIM(LTRIM(SUBSTR(X,1,#START - 1)),"'")),"'"). COMPUTE X=LTRIM(SUBSTR(X,#START+1,LENGTH(X)-#START -1)) . END LOOP IF INDEX(X,',') = 0 . COMPUTE NX(#VAR+1) = RTRIM(RTRIM(LTRIM(LTRIM(X,"'"))),"'"). EXE. |
Related pages
...