| Date: | Wed, 16 May 2007 13:05:09 +0000 |
| Reply-To: | rwwalker@optonline.net |
| Sender: | "SPSSX(r) Discussion" <SPSSX-L@LISTSERV.UGA.EDU> |
| From: | Bob Walker <rwwalker@optonline.net> |
| Subject: | Re: Paired compute looping help |
|
| In-Reply-To: | <7.0.1.0.2.20070515232550.03c4e6f0@mindspring.com> |
| Content-Type: | text/plain; charset=us-ascii |
Richard,
Nice upgrade, as usual. Using vector was "mental scrap" left after attempting to build upon Gene Maguin's loop indexing, but you're absolutely right -- it's superfluous if we use !CONCAT throughout. Thanks!
Bob Walker
Surveys & Forecasts, LLC
www.safllc.com
----- Original Message -----
From: Richard Ristow
Date: Tuesday, May 15, 2007 11:39 pm
Subject: Re: Paired compute looping help
To: rwwalker@optonline.net, SPSSX-L@LISTSERV.UGA.EDU
> 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]
>
>
Bob Walker
Surveys & Forecasts, LLC
www.safllc.com
|