* Переход от "высокого" набора данных к "широкому" - общее решение.
*(Вопрос) Данные по каждому объекту (ID) расположены в разных строках согласно времени измерения переменных VAR1-VAR3 (переменная времени - TIME):
ID TIME VAR1 VAR2 VAR3
1 1 A D G
1 2 B E H
1 3 C F I
[...]
* Мне требуется записать всю информацию по каждому объекту в одну строку,
создав отдельную копию переменных VAR1-VAR3 для каждого из моментов времени. То есть, так:
* ID VAR11 VAR12 VAR13 VAR21 VAR22 VAR23 VAR31 VAR32 VAR33
1 A B C D E F G H I
2 ...
* Замечу, что на самом деле имеется более 3 переменных VAR и более 3 моментов времени.
* Любые предложения приветствуются.
* (Ответ) Размещён в новостной группе spss 10.10.2001. Автор: rlevesque@videotron.ca.
* Мой веб-сайт по SPSS ----> http://www.spsstools.net
* Обратите внимание, что именование исходных переменных как var1, var2 и var3, в общем случае, не годится, так как, например,
в момент времени 11 будет конфликт между именами:
var1 в момент времени 11, что даёт переменную var111 и
var11 в момент времени 1, что, опять же, даёт переменную var111.
DATA LIST LIST /ID(F8.0) time1(F8.0) var1t(A8) var2t(A8) var3t(A8).
BEGIN DATA
1 1 A E I
1 2 B F J
1 3 C G K
1 4 D H L
2 1 AA EE II
2 2 BB FF JJ
2 3 CC GG KK
2 4 DD HH LL
END DATA.
LIST.
SET MPRINT=no.
*//////////////////////////////////.
DEFINE !transf(nbvars=!TOKENS(1) /nbtime=!TOKENS(1))
!DO !cnt=1 !TO !nbvars.
STRING !CONCAT('var',!cnt,'t1') TO !CONCAT('var',!cnt,'t',!nbtime)(A8).
VECTOR !CONCAT('var',!cnt)=!CONCAT('var',!cnt,'t1') TO !CONCAT('var',!cnt,'t',!nbtime).
!DOEND
VECTOR v=var1t1 TO !CONCAT('var',!nbvars,'t',!nbtime).
!DO !cnt=1 !TO !nbvars.
COMPUTE !CONCAT(v,'((',!cnt,'-1)*',!nbtime,'+time1)')=!CONCAT(var,!cnt,'t').
!DOEND.
AGGREGATE
/OUTFILE=*
/BREAK=id
!DO !cnt=1 !TO !nbvars
/!CONCAT('var',!cnt,'t1') TO !CONCAT('var',!cnt,'t',!nbtime)=MAX(!CONCAT('var',!cnt,'t1') TO !CONCAT('var',!cnt,'t',!nbtime))
!DOEND.
EXECUTE.
!ENDDEFINE.
*//////////////////////////////////.
SET MPRINT=yes.
* Вызов макроса осуществляется с указанием числа переменных и числа моментов времени.
* Примеч.: при необходимости определение значений этих двух параметров можно также запрограммировать.
!transf nbvars=3 nbtime=4.