Преобразование от «широкого» к «узкому» с добавлением старых имён переменных как меток значен
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 | * Преобразование от "широкого" к "узкому" с добавлением старых имён переменных в качестве меток значений. * ВОПРОС: требуется преобразовать файл данных от формата с одной строкой на объект к формату нескольких строк на объект. * При этом хочется, чтобы прежние имена переменных в "широком" формате стали метками значений вновь созданных переменных. ОТВЕТ. Автор: rlevesque@videotron.ca. * Замечу, что вместо переменной case (фигурировавшей в исходном вопросе), я использую переменную casen, а вместо value - value1, т.к. надёжнее (а иногда и просто необходимо) не использовать в качестве имён переменных зарезервированные слова SPSS. * ###### ПРИМЕЧАНИЕ ###### * Использованная в данном синтаксисе технология (когда синтаксис сам формирует новый файл синтаксиса) весьма универсальна и может быть рекомендована для многих других решений. DATA LIST LIST /ant_s ant_r infer_s infer_r casen. BEGIN DATA 0 0 1 0 1 1 1 0 0 2 1 0 2 2 3 END DATA. VARIABLE LABEL ant_s 'anterior_stress' ant_r 'anterior_rest' infer_s 'inferior_stress' infer_r 'inferior_rest'. LIST. SAVE OUTFILE='c:\\temp\\data.sav'. MATCH FILES FILE=* /DROP=casen. FLIP. STRING labelstr(A10). COMPUTE labelstr=CONCAT("'",case_lbl,"'"). COMPUTE segment=$casenum. FORMATS segment (F8.0). WRITE OUTFILE 'c:\\temp\\temp.sps' /"ADD VALUE LABELS segment "segment " " labelstr ".". EXE. GET FILE='c:\\temp\\data.sav'. * начало фрагмента кода, предложенного самим автором вопроса. VECTOR yvec = ant_s TO infer_r. LOOP segment = 1 to 4. COMPUTE value1=yvec(segment). XSAVE OUTFILE="c:\\temp\\mahr_vec.sav" / KEEP segment casen value1. END LOOP. EXECUTE. GET FILE="c:\\temp\\mahr_vec.sav". * конец фрагмента кода, предложенного автором вопроса. * Следующая строка запускает рабочий синтаксис, который делает все нужные преобразования. INCLUDE 'c:\\temp\\temp.sps'. |