* Тема: автоматическое перекодирование с единой схемой для нескольких переменных. * Ключевые слова: автоматическое, перекодирование, общая, схема, несколько, строки, переменные. * Опубликован: 16.06.2008. * Автор: Raynald Levesque. * Перевод: А. Балабанов. * Размещение: http://www.spsstools.ru/Syntax/Transform/GlobalAutorecode.txt (.sps). *(Вопрос) Имеется данные следующего вида. ID STR1 STR2 STR3 STR4 STRX 1 a b c d e 2 b d e 3 c c a c b 3 e c a 2 e b a 1 a b Я желаю перекодировать все эти строковые переменные с единой схемой перекодировки. Не каждая из этих переменных имеет все возможные строковые значения, но вместе они формируют полный набор всех возможных значений, которые надо учесть при перекодировании. Т.е. нужен некий единый список возможных значений для всех переменных разом так, чтобы можно было получить результат примерно в таком виде: ID STR1 STR2 STR3 STR4 STRX 1 1 2 3 4 5 2 2 4 5 3 3 3 1 3 2 3 5 3 1 2 5 2 1 1 1 2 ("a"=1, "b"=2, "c"=3, "d"=4, "e"=5) *(Ответ) Автор: Raymald Levesque, 16.07.2002. DATA LIST LIST /id (F1.0) str1 str2 str3 str4 str5 (5A1). BEGIN DATA 1 a b c d e 2 b d e 3 c c a c b 4 e c a 5 e b a 6 a b END DATA. LIST. *////////////////. DEFINE !apply (stem=!TOKENS(1) /nb=!TOKENS(1)) SAVE OUTFILE='c:\\temp\\original data.sav'. STRING s(A1). VECTOR s=!CONCAT(!stem,'1') TO !CONCAT(!stem,!nb). LOOP cnt=1 TO !nb. COMPUTE s=s(cnt). XSAVE OUTFILE='c:\\temp\\data1.sav' /KEEP=id cnt s. END LOOP. EXECUTE. GET FILE='c:\\temp\\data1.sav'. SELECT IF RTRIM(s)<>"". AUTORECODE s /INTO srec. N OF CASES 1. SAVE OUTFILE='c:\\temp\\label definitions.sav'. GET FILE='c:\\temp\\data1.sav'. SELECT IF RTRIM(s)<>"". SORT CASES BY s. AGGREGATE /OUTFILE=* /BREAK=s /id = N(id). COMPUTE recnb=$CASENUM. SAVE OUTFILE='c:\\temp\\data2.sav'. GET FILE='c:\\temp\\data1.sav'. SORT CASES BY s. MATCH FILES FILE=* /TABLE='c:\\temp\\data2.sav' /BY=s. SORT CASES BY id cnt. VECTOR str(!nb F1). COMPUTE str(cnt)=recnb. AGGREGATE /OUTFILE=* /BREAK=id /!CONCAT(!stem,'1') TO !CONCAT(!stem,!nb) = FIRST(!CONCAT(!stem,'1') TO !CONCAT(!stem,!nb)). !DO !cnt=1 !TO !nb RENAME VARIABLE (!CONCAT(!stem,!cnt)=srec). APPLY DICTIONARY FROM='c:\\temp\\label definitions.sav'. RENAME VARIABLE (srec=!CONCAT(!stem,!cnt)). !DOEND !ENDDEFINE. *////////////////. SET MPRINT=yes. !apply stem=str nb=5. SET MPRINT=no. * P.S. Начиная с версии SPSS 13.0 подобный же результат может быть достигнут использованием подкоманды GROUP в команде AUTORECODE - примеч. перев.:. AUTORECODE VARIABLES=str1 str2 str3 str4 str5 /INTO nstr1 nstr2 nstr3 nstr4 nstr5 /GROUP /BLANK=MISSING /PRINT.