* Преобразование от "широкого" к "узкому" с добавлением старых имён переменных в качестве меток значений. * ВОПРОС: требуется преобразовать файл данных от формата с одной строкой на объект к формату нескольких строк на объект. * При этом хочется, чтобы прежние имена переменных в "широком" формате стали метками значений вновь созданных переменных. ОТВЕТ. Автор: 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'.