Skip to Main Content

Looping without scratch variables in SPSS macros | SPSS Code Fragments

In SPSS temporary variables are called “scratch” variables. You may want to
use scratch variables when you are writing a program and want to be sure that
you do not overwrite variables in the existing dataset.  However, scratch
variables cannot be used in SPSS macros.  In this example, we show one
possible way to create and delete variables within an SPSS macro.  This
macro, called ab, requires three arguments (ID, x and iota).  With
this information, ab does some math and creates two new variables, called
a and b.  The set seed, compute and
aggregate
commands that appear at the top are used to create some of the
variables to be used in the macro.  The dataset

https://stats.idre.ucla.edu/wp-content/uploads/2016/02/data_for_looping_wo_scratch_vars.sav
contains only one variable, called
subject_id
.

set seed 9961458.
compute iota1 = rv.normal(0,1).
aggregate outfile = * mode = addvariables overwrite = yes
/break = subject_id
/x1 = nu(subject_id).
exe.

define !ab (ID = !charend('/')
                 /x = !charend('/')
                 /iota = !cmdend )

compute my_ID = !ID.
compute my_x = !x.
compute my_iota = !iota.
compute a = 0.
compute b = 0.
exe.

loop i = 1 to my_x - 1.
compute a = a+ my_iota**(1*i)*(my_x + i).
end loop.

compute a = 2/my_x + 2*a/(my_x**4). 

loop i = 2-my_x to my_x-1.
compute b = b + my_iota**(1*(my_x-i))*(my_x+abs(i)).
end loop.

compute b = b / (my_x**4).

formats a b (f8.6).
exe.
delete variables my_ID my_x i my_iota.
exe.
!enddefine.

!ab ID = subject_id
 /x = x1
 /iota = iota1.

list.
subject_id    iota1      x1        a        b 
 
        1      2.18      12 20.71195 51006.67 
        1      -.56      12  .166228 -.000404 
        1       .07      12  .166759  .000081 
        1       .05      12  .166737  .000062 
        1       .05      12  .166731  .000056 
        1      -.45      12  .166285 -.000350 
        1       .00      12  .166671  .000004 
        1      2.19      12 22.01318 57941.46 
        1      -.80      12  .166045 -.000500 
        1       .85      12  .174131  .005018 
        1     -1.14      12  .160783  .010173 
        1       .58      12  .168544  .001421 
        2       .67       8  .259883  .006539 
        2      -.26       8  .249102 -.000777 
        2     -1.17       8  .235630  .014480 
        2      1.51       8  .578922 2.856295 
        2       .60       8  .257225  .004905 
        2     -1.61       8  .120478 1.621782 
        2      1.39       8  .454921 1.017976 
        2       .25       8  .251501  .001180 
        3       .08      10  .200195  .000167 
        3     -2.43      10 -7.73109 10911.35 
        3     -1.33      10  .170643  .167896 
        3     -1.74      10 -.164870 25.45830 
        3      -.86      10  .198570 -.000855 
        3      -.83      10  .198708 -.000861 
        3       .41      10  .201635  .001279 
        3      -.24      10  .199581 -.000372 
        3      -.09      10  .199826 -.000152 
        3       .89      10  .214761  .010533 
        4      -.76       6  .327085 -.003653 
        4     -1.26       6  .296840  .037971 
        4     -1.16       6  .307841  .013728 
        4       .88       6  .380613  .036235 
        4      -.23       6  .331357 -.001621 
        4      1.31       6  .513102  .395622 
        5      1.44       4  .814710  .536701 
        5      -.40       4  .488325 -.008169 
        5       .32       4  .518827  .011884 
        5      1.29       4  .745783  .337227 
 
Number of cases read:  40    Number of cases listed:  40