2016-07-04 3 views
3

J'ai 26 variables et chacune d'elles contient des nombres allant de 1 à 61. Je veux pour chaque cas de 1, chaque cas de 2 etc. le nombre 1 dans une nouvelle variable . S'il n'y a pas 1, la variable doit contenir 2. Ainsi 26 variables avec des données telles que: 1 15 28 39 46 1 12 etc.SPSS recodage des données de variables à partir de plusieurs variables en variables booléennes

Et je veux 61 variables avec: 1 2 1 2 2 1 etc.

J'ai lu à propos de la création de vecteurs, de boucles, de faire si etc. mais je ne trouve pas la bonne façon de le coder. Ce que j'ai fait est juste de créer 61 variables et d'écrire

faire si V1 = 1 ou V2 = 1 ou (etc jusqu'à V26).

recoder newV1 = 1.

fin si.

exe.

** répéter ceci pour toutes les 61 variables.

recoder newV1 en newV61 (manquant = 2).

Donc, c'est beaucoup de code et tout un détour de ce que j'imagine qu'il pourrait être.

Toute personne qui peut m'aider avec celui-ci? Votre aide est tres apprecie!

Répondre

0

Vous avez besoin d'une boucle imbriquée: deux boucles - une externe et une interne.

1

nouménal est correct, vous pourriez le faire avec deux boucles. Une autre façon est cependant d'accéder au VECTOR en utilisant la valeur originale, en écrivant cela comme 1, et en mettant toutes les autres valeurs à zéro. Pour illustrer, d'abord je fais quelques fausses données (avec 4 variables d'origine au lieu de 26) nommé X1 to X4.

*Fake Data. 
SET SEED 10. 
INPUT PROGRAM. 
LOOP Id = 1 TO 20. 
END CASE. 
END LOOP. 
END FILE. 
END INPUT PROGRAM. 
VECTOR X(4,F2.0). 
LOOP #i = 1 TO 4. 
    COMPUTE X(#i) = TRUNC(RV.UNIFORM(1,62)). 
END LOOP. 
EXECUTE. 

Maintenant que ce code est de créer quatre vecteur fixe pour aller à chaque variable, puis utilise DO REPEAT pour désigner en fait au bout VECTOR. Puis se termine avec RECODE - si elle est manquante, il doit être codé un 2.

VECTOR V1_ V2_ V3_ V4_ (61,F1.0). 
DO REPEAT orig = X1 TO X4 /V = V1_ V2_ V3_ V4_. 
    COMPUTE V(orig) = 1. 
END REPEAT. 
RECODE V1_1 TO V4_61 (SYSMIS = 2). 

Il est un peu douloureux, comme pour la commande VECTOR d'origine, vous devez écrire tous les talons, mais alors vous pouvez copier-coller cela dans la sous-commande DO REPEAT (ou faire une macro pour le faire pour vous).


Pour une illustration plus simple, si nous avons notre variable d'origine, disons A, qui peut prendre des valeurs entières de 1 à 61, et nous voulons étendre à nos 61 variables muettes, nous pourrions alors faire une vecteur, puis accédez à l'emplacement dans ce vecteur.

VECTOR DummyVec(61,F1.0). 
COMPUTE DummyVec(A) = 1. 

Pour un enregistrement si A = 10, alors ici DummyVec10 sera égal à 1, et toutes les autres variables seront DummyVec encore par le système manquant par défaut. Pas besoin d'utiliser DO IF pour 61 valeurs.

Le reste du code est juste supplémentaire pour le faire en un tour de main pour plusieurs variables d'origine.

1

Cela devrait le faire:

do repeat NewV=NewV1 to NewV61/vl=1 to 61. 
    compute NewV=any(vl,v1 to v26). 
end repeat. 

EXPLICATION: Cette syntaxe passera par les valeurs 1 à 61, pour chacun vérifier si l'une des variables v1 à v26 a cette valeur. Si l'un d'entre eux le fait, le NewV droit recevra la valeur 1. Si aucun d'entre eux ne le fait, le NewV droit recevra la valeur 0. Assurez-vous simplement que v1 à v26 sont consécutivement classés dans le fichier. si non, alors changez pour:

compute NewV=any(vl,v1, v2, v3, v4 ..... v26). 
+0

Ahh J'ai mal lu la question initiale. Vous n'avez pas besoin de faire une boucle sur les 61 variables, il vous suffit de faire une boucle sur le 26 et d'assigner ensuite en utilisant 'NewVector (Orig_Integer)'. –

+0

Oui merci qui fonctionne! – Larissa