SPSS: REPEAT with a different number of consistent variables

I have a dataset where each case has the following set of variables:

VarA1.1 - VarA25.185 (total 4625 variables) VarB.1 - VarB.185 (total 185 variables)

In each case, VarA1.1, VarA2.1, VarA3.1, etc. linked to the same VarB. 1.

I want to use the REPEAT function to search through each .1 instance, using both VarA and VarB.

Code example:

DO REPEAT VarA = VarA1.1 to VarA25.185
/ VarB = VarB.1 to VarB.185.
if (VarA = X) AND ((VarB-Y)<0)
VarC = Z.
END REPEAT.
EXE.

However, it seems that since VarA and VarB have different numbers of variables in the repetition list, they are not concatenated. I want to associate each VarA # (1-25) .1 with VarB.1, each VarA # (1-25) .2 with each VarB.2, etc. Prior to VarB.185, so variable matching uses variable pairing in the repeat function.

Thank!

+4
2

- LOOP DO REPEAT . , , A, 1 10.

SET SEED 10.
INPUT PROGRAM.
LOOP Id = 1 TO 100.
END CASE.
END LOOP.
END FILE.
END INPUT PROGRAM.
DATASET NAME Sim.

*Making random data.
VECTOR A1.(10).
VECTOR A2.(10).
VECTOR A3.(10).
VECTOR B.(10).
NUMERIC X Y.
DO REPEAT a = A1.1 TO Y.
  COMPUTE a = RV.BERNOULLI(0.5).
END REPEAT.
EXECUTE.

, , . DO REPEAT 25 . , LOOP 25 , DO REPEAT A.

VECTOR A1 = A1.1 TO A1.10.
VECTOR A2 = A2.1 TO A2.10.
VECTOR A3 = A3.1 TO A3.10.
VECTOR B = B.1 TO B.10.
VECTOR C.(10).
LOOP #i = 1 TO 10.
  DO REPEAT A = A1 A2 A3.
    IF (A(#i) = X) AND (B(#i)-Y<0) C.(#i) = B(#i).
  END REPEAT.
END LOOP.
EXECUTE.

Code golf, , -, VECTOR -. , .

+4

, 25 , 185 .

SPSS Macros . .

DEFINE !MyMacroName ()
SET MPRINT ON.
/* Generate some example data to match desired data format*/.

set seed = 10.
input program.
loop #i = 1 to 50.
compute case = #i.
end case.
end loop.
end file.
end input program.
dataset name sim.
execute.

!do !i =1 !to 25
  vector !concat('VarA',!i,'.(185, F1.0).').
  do repeat v = !concat('VarA',!i,'.1') to !concat('VarA',!i,'.185').
    compute v = TRUNC(RV.UNIFORM(1,6)).
  end repeat.
!doend

vector VarB.(185, F1.0).
do repeat v = VarB.1 to VarB.185.
  compute v = TRUNC(RV.UNIFORM(1,6)).
end repeat.

execute.

/* Solve actual problem */.
!do !i =1 !to 185
  !do !j = 1 !to 25
    if (!concat('VarA',!j,'.',!i) = !concat('VarB.',!i)) !concat('VarC', !j)=1.
  !doend
!doend

SET MPRINT OFF.
!ENDDEFINE.

/* Run macro */.
!MyMacroName.
+3

Source: https://habr.com/ru/post/1669661/


All Articles