Преобразование структуры данных от «узкой» к «широкой»
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 52 53 54 55 56 57 58 59 60 61 62 | * Быстрое изменение стуктуры данных от "узкой" к "широкой". * Вопрос: Имеются данные такой структуры, которая показана в команде 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. |
Related pages
...