```Date: Tue, 15 May 2007 23:38:56 -0400 Reply-To: Richard Ristow Sender: "SPSSX(r) Discussion" From: Richard Ristow Subject: Re: Paired compute looping help Comments: To: rwwalker@optonline.net In-Reply-To: Content-Type: text/plain; charset="us-ascii"; format=flowed At 10:47 PM 5/15/2007, Bob Walker wrote: [test data omitted; see cited posting] >Here's one approach: > >DEFINE !BUBBA() >!LET !MIN=1 !LET !MAX=5 >VECTOR V=!CONCAT("V",!MIN) TO !CONCAT("V",!MAX). > >!DO !A=!MIN !TO !MAX !DO !B=!A !TO !MAX >!IF (!A<>!B) !THEN >COMPUTE !CONCAT("V_",!A,!B)=V(!A)+V(!B). >!IFEND !DOEND !DOEND >EXECUTE. >DATASET NAME BUBBA WINDOW=FRONT. > >!ENDDEFINE. Now, that is a SWEET little piece of macro writing. Curious: since you're unrolling the COMPUTEs in a macro loop anyway, why not generate the arguments to the COMPUTEs by catenation, rather than vector indexing? Like this (WRR-not saved separately): [test data] DEFINE !BUBBA() !LET !MIN=1 !LET !MAX=5 !DO !A=!MIN !TO !MAX !DO !B=!A !TO !MAX !IF (!A<>!B) !THEN COMPUTE !CONCAT("V_",!A,!B)=!CONCAT("V",!A) + !CONCAT("V",!B). !IFEND !DOEND !DOEND !ENDDEFINE. PRESERVE. SET MPRINT ON. !BUBBA. 144 M> 145 M> . 146 M> COMPUTE V_12 = V1 + V2. 147 M> COMPUTE V_13 = V1 + V3. 148 M> COMPUTE V_14 = V1 + V4. 149 M> COMPUTE V_15 = V1 + V5. 150 M> COMPUTE V_23 = V2 + V3. 151 M> COMPUTE V_24 = V2 + V4. 152 M> COMPUTE V_25 = V2 + V5. 153 M> COMPUTE V_34 = V3 + V4. 154 M> COMPUTE V_35 = V3 + V5. 155 M> COMPUTE V_45 = V4 + V5. 156 M> . RESTORE. 157 M> RESTORE. DATASET NAME BUBBA WINDOW=FRONT. LIST. [data listing] ```

Back to: Top of message | Previous page | Main SPSSX-L page