2017-08-09 8 views
3

Y a-t-il une syntaxe dans SPSS qui ressemble à une liste ou à un ensemble de valeurs? J'ai été incapable de trouver une syntaxe qui utilisera une liste/ensemble comme référence.Existe-t-il une syntaxe SPSS capable de recoder une variable en fonction d'une liste ou d'un ensemble de valeurs?

Un exemple d'utilisation est le recodage;

DATASET ACTIVATE DataSet1. 
STRING V2 (A8). 
RECODE V1 ('a' = 'group1') ('b' = 'group1') ('c' = 'group1') INTO V2. 
EXECUTE. 

Au lieu de taper chaque valeur comme ci-dessus, je voudrais utiliser une fonction comme le IN SQL, si elle existe.

Logic:

if V1 IN (a,b,c,e...) then V = "group1"... 

Merci!

Répondre

3

Voici quelques possibilités et des exemples pour vous aider à démarrer:

Votre commande recode pourrait être plus compact, comme ceci:

recode V1 ('a' 'b' 'c'='group1') ('d' 'e' 'f'='group2') INTO V2. 

La fonction any vous donne une valeur logique. Par exemple:

if any(V1,'a', 'b', 'c') [do something]. /* can also use DO IF. 

ou

compute group1=any(V1,'a', 'b', 'c'). 

Si vous souhaitez rechercher des chaînes dans les valeurs, vous pouvez utiliser char.index cette façon (dans cet exemple la chaîne de recherche « abc » est divisé en un chaînes de caractères, donc V1 est testé pour contenir chacun 'a', 'b' et 'c' séparément):

if char.index(V1,'abc',1)>0 V2='group1'. 

pour les options plus complexes que vous ca n boucle sur les valeurs avec loop ou do repeat. Par exemple, cette boucle donnera à V2 la valeur de 'grp1' pour chaque valeur de V1 qui contient 'a', 'b' ou 'c', 'grp2' si V1 contient 'd', 'e' ou 'f' :

do repeat MyStr='a' 'b' 'c' 'd' 'e' 'f'/grp='grp1' 'grp1' 'grp1' 'grp2' 'grp2' 'grp2'. 
    if char.index(V1,Mystr)>0 v2=grp. 
end repeat. 
+0

Excellent, le any() est ce qu'il cherchait! Votre exemple de «répétition» sera également très précieux. – joshuaf59

+1

Un autre exemple si vous avez une très grande liste est d'utiliser une table de recherche, puis d'utiliser 'MATCH FILES'. –

+0

@AndyW c'est tout à fait correct pour les longues listes - quand vous cherchez des mathces complètes. Peut également être utilisé lors de la recherche de chaînes contenues, mais cela serait plus complexe (je suppose que ce n'est pas dû à la correspondance, mais utiliser 'write out' et' include' pour créer la syntaxe). –