*To 'FLIP' a set of string variables use the following approach. * Posted by Gail Lucas in SPSSX-L list on 2000/10/04. DATA LIST / STRING1 TO STRING4 (4(X,A14)). BEGIN DATA * Case1 Var1 * * Case1 Var2 * * Case1 Var3 * * Case1 Var4 * * Case2 Var1 * * Case2 Var2 * * Case2 Var3 * * Case2 Var4 * * Case3 Var1 * * Case3 Var2 * * Case3 Var3 * * Case3 Var4 * * Case4 Var1 * * Case4 Var2 * * Case4 Var3 * * Case4 Var4 * * Case5 Var1 * * Case5 Var2 * * Case5 Var3 * * Case5 Var4 * END DATA . * 1. Write out the data retaining row and column indexing *. STRING hold(A14). COMPUTE id=$CASENUM. VECTOR tmp=string1 TO string4. LOOP i=1 TO 4. COMPUTE hold=tmp(i). XSAVE OUTFILE 'tmp.sav' / KEEP id i hold. END LOOP. EXECUTE. * 2. Rearrange the row and column indices *. GET FILE 'tmp.sav'. VECTOR trps(5,A14). COMPUTE trps(id) = hold. AGGREGATE OUTFILE * / BREAK i / trps1 TO trps5=MAX(trps1 TO trps5). LIST. FORMATS i (F1). LIST. *----- A MACRO TO DO IT IN A GENERAL WAY ----- . DEFINE trpstrs ( vars !ENCLOSE ('(',')') / qvar !TOKENS(1) / maxw !TOKENS(1) / newn !TOKENS(1) !DEFAULT ('Case_') / nrow !TOKENS(1) ) . STRING hold(!CONCAT('a',!maxw) ). COMPUTE @id@=$CASENUM. VECTOR tmp=!vars . LOOP i=1 TO !qvar . + COMPUTE hold=tmp(i). + XSAVE OUTFILE '@trp_tmp@.sav' / KEEP @id@ i hold. END LOOP. EXECUTE. GET FILE '@trp_tmp@.sav' . VECTOR !newn(!nrow,!CONCAT('a',!maxw) ). COMPUTE !newn(@id@) = hold. AGGREGATE OUTFILE * / BREAK i / !CONCAT(!newn,'1 TO ',!newn,!nrow)=MAX(!CONCAT(!newn,'1 TO ',!newn,!nrow)). FORMATS i (F1). ERASE FILE '@trp_tmp@.sav' . !ENDDEFINE . DATA LIST / STRING1 TO STRING4 (4(X,A14)). BEGIN DATA * Case1 Var1 * * Case1 Var2 * * Case1 Var3 * * Case1 Var4 * * Case2 Var1 * * Case2 Var2 * * Case2 Var3 * * Case2 Var4 * * Case3 Var1 * * Case3 Var2 * * Case3 Var3 * * Case3 Var4 * * Case4 Var1 * * Case4 Var2 * * Case4 Var3 * * Case4 Var4 * * Case5 Var1 * * Case5 Var2 * * Case5 Var3 * * Case5 Var4 * END DATA . set mprint=yes. trpstrs vars=(string1 to string4) qvar=4 maxw=15 newn=string nrow=5.