* Быстрое изменение стуктуры данных от "узкой" к "широкой". * Вопрос: Имеются данные такой структуры, которая показана в команде DATA LIST ниже. Мне нужно сделать так, чтобы каждому уникальному значению переменной var1 соответствовала одна строка. * Поскольку максимальное число значений у переменной var1 каждый раз наперёд неизвестно, я хотел бы иметь синтаксис, который адаптируется к текущему числу уникальных значений. * Ответ: размещён в новостной группе SPSS 23.06.2001, автор: rlevesque@videotron.ca. DATA LIST LIST /var1(A1) var2(F8.0). BEGIN DATA A 1 A 7 A 32 A 5 B 9 C 34 C 9 D 3 D 7 D 0 D 1 END DATA. LIST. AUTORECODE VARIABLES=var1 /INTO var1num. SAVE OUTFILE='c:\\temp\\mydata.sav'. ** Определим макрос, который даст нам число требуемых колонок данных **. AGGREGATE OUTFILE=* /BREAK=var1num /n = N(var1num). COMPUTE nobreak=1. AGGREGATE OUTFILE=* /BREAK=nobreak /n = MAX(n). DO IF $CASENUM=1. - WRITE OUTFILE='c:\\temp\\define n.sps' /'DEFINE !n()'n'!ENDDEFINE.'. END IF. EXECUTE. INCLUDE FILE='c:\\temp\\define n.sps'. ** Теперь определим рабочий макрос **. */////////////////////////. DEFINE !doit(!POS=!TOKENS(1)) COMPUTE casen=$CASENUM. RANK VARIABLES=casen (A) BY !1 /RANK /PRINT=NO. VECTOR vec(!n F8.0). COMPUTE vec(rcasen)=var2. AGGREGATE /OUTFILE=* /BREAK=var1 /vec1 TO !CONCAT(vec,!n) = MAX(vec1 TO !CONCAT(vec,!n)). !ENDDEFINE. */////////////////////////. GET FILE='c:\\temp\\mydata.sav'. !doit var1num.