* RL wrote this to answer following Q in usenet on April 1,2000.
********************************************.
*QUESTION:
>I am doing a simulation in SPSS 9.0 that involves repeatedly generating
>samples (size say N = 100) with binary variables variables,and examining
>their relationship. The pseudo-code might look something like this:
>
>new file .
>input program .
>loop #i = 1 to 100.
>compute x, a binary variable
>compute y, a binary variable with some relationship to x
>end loop .
>...etc.
>crosstabs y by x /......
>
>The preceding occurs inside a !do loop in a macro, so that I can
>generate some large number of samples, say 10,000. The catch
>is that I would like to write the crosstabs cell frequencies to
>an output file. Here's where my difficulty lies: If I declare
>a procedure output file, the output file is re-initialized for
>each execution of the crosstabs /write = command, so that only
>the last sample's frequencies, rather than all the samples' cell
>frequencies, are in the output file. I thought I would hack my
>way around this by declaring the procedure output file to be
>'*', i.e., the output or draft output window, thus capturing
>the results of all the crosstabs/write = commands, but no
>luck, since '*' turns out to be an unacceptable file name
>for the procedure output command.
>
>Anyone have any ideas for making this work?
>
******************************************.
*ANSWER.
DEFINE !DOIT(size=!TOKENS(1)
/nbrec=!TOKENS(1))
!DO !count=1 !TO !size
new file .
input program .
loop #i = 1 to !nbrec.
compute x=TRUNC(UNIFORM(1)*2).
compute y=TRUNC(UNIFORM(1)*2).
end case.
end loop .
end file.
end input program.
VECTOR cell(4F8).
COMPUTE cell(1+x*2+y)=1.
COMPUTE numb=!count.
AGGREGATE
/OUTFILE=*
/BREAK=numb
/cell_00 = SUM(cell1) /cell_01 = SUM(cell2)
/cell_10 = SUM(cell3) /cell_11 = SUM(cell4).
/* Cell_00 contains number of cases where x=0 and y=0./
/* Cell_01 contains number of cases where x=0 and y=1./
/* Cell_10 contains number of cases where x=1 and y=0./
/* Cell_11 contains number of cases where x=1 and y=1./
LIST.
!IF (!count=1) !THEN
SAVE OUTFILE='sample.sav' /COMPRESSED.
!ELSE
ADD FILES /FILE=* /FILE='sample.sav'.
SAVE OUTFILE='sample.sav' /COMPRESSED.
!IFEND.
!DOEND.
!ENDDEFINE.
!DOIT size=3 nbrec=200.
GET FILE='sample.sav'.