2017-02-14 1 views
4

j'ai un ensemble de données où chaque cas a l'ensemble des variables suivantes:SPSS: ne répètent avec un nombre différent de variables appariées

VarA1.1 à VarA25.185 (total de 4625 variables) VarB.1 à VarB .185 (total de 185 variables)

Pour chaque cas, VarA1.1, VarA2.1, VarA3.1, etc. sont tous liés au même VarB.1.

Je souhaite utiliser une fonction DO REPEAT pour rechercher dans chaque instance .1 en utilisant à la fois VarA et VarB.

code Exemple:

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. 

Cependant, il semble que parce qu'il ya un nombre différent de variables dans la liste de répétition de VarA et VarB, ils ne se marient pas. Je veux associer chaque VarA # (1-25) .1 avec VarB.1, chaque VarA # (1-25) .2 avec chaque VarB.2, etc. jusqu'à VarB.185 de sorte que dans la fonction repeat la bonne l'appariement de variables est utilisé.

Merci!

Répondre

4

Une autre façon de le faire est d'utiliser un LOOP à l'extérieur et un DO REPEAT à l'intérieur. Voici donc quelques exemples de données, avec seulement trois variables A qui vont de 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. 

Voici donc la partie que vous voulez prêter attention. Votre DO REPEAT boucle actuellement sur les 25 variables. Ceci le change cependant, donc la partie LOOP passe au-dessus des 25 variables, mais le DO REPEAT passe par-dessus chacun de vos vecteurs 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. 

golf Code, il ne va probablement pas à battre l'approche macro, puisque vous devez définir toutes ces VECTOR déclarations. Mais je pense que c'est une manière conceptuellement claire d'écrire le programme.

+0

Neat! N'a jamais utilisé un combo 'LOOP' /' DO REPEAT' avant. En plus d'avoir à écrire toutes les commandes 'VECTOR', ça marcherait très bien. Surtout si vous avez quelques variables ou une seule variable 'A' comme dans votre exemple et évite ainsi d'avoir à plonger dans le langage macro. –

+0

Génial, merci à vous deux pour vos réponses! En tant que personne relativement nouvelle à SPSS, j'apprécie l'approche en boucle/répétition, car elle est logique sur le plan conceptuel. – ScienceStudent

3

On dirait que ce que vous essayez de faire est de boucler plus de 25 variables mais répétez cela pour 185 variables.

Il serait plus intuitif d'utiliser SPSS Macros pour y parvenir. En parcourant les étapes ci-dessous, vous découvrirez les éléments de base pour résoudre votre problème de données.

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.