2017-01-09 132 views
1

我需要基於3個變量創建一個新變量。SPSS語法 - 基於3個變量的新變量

如果有人被編碼爲1對1 3的任何變量,它們被編碼爲1的新變量

如果他們不這樣做的任何變量的代碼1,但代碼2對3中的任意1

IF (Keep_Any=1 OR Find_Any=1 OR Improve_Any=1) Keep_Find_Improve=1. 
IF ((Keep_Find_Improve~= 1) & (Keep_Any=2 | Find_Any=2 | Improve_Any=2)) Keep_Find_Improve=2. 
IF (Keep_Find_Improve~=1 & Keep_Find_Improve~=2) Keep_Find_Improve=99. 
EXECUTE. 

然而,TH:變量他們在新的變量

其他一切編碼爲2 99

在語法中,我寫了這個作爲編碼第一部分正確識別編碼爲1的情況,但其餘語法不起作用。這是儘管使用了使用上的其他變量完全相同的邏輯有些語法:

COMPUTE Keep_Any= Q9a_recoded = 1 | Q9b_recoded = 1 | Q9c_recoded = 1. 
EXECUTE. 

IF (Q9A_recoded=1 OR Q9B_recoded=1 OR Q9C_recoded=1) Keep_Any=1. 
IF ((Keep_Any~=1) & (Q9A_recoded= 2 OR Q9B_recoded=2 OR Q9C_recoded=2)) Keep_Any=2. 
IF (Keep_Any~=1 & Keep_Any~=2) Keep_Any=99. 
EXECUTE. 

任何人都不會有爲什麼發生這種情況,以及如何解決它的任何想法?

+0

難道是因爲失蹤嗎?確保您的變量不會丟失。如果他們想要失蹤,請確保他們在您的代碼中正確記錄了帳戶? –

回答

1

嘗試:

COMPUTE Target1=99. 
COMPUTE Target1=ANY(2, V1, V2, V3). 
COMPUTE Target1=ANY(1, V1, V2, V3). 

或者更好的(更有效的,即使多行代碼)

DO IF ANY(1, V1, V2, V3)=1. 
    COMPUTE Target2= 1. 
ELSE IF ANY(2, V1, V2, V3)=1. 
    COMPUTE Target2 = 2. 
ELSE. 
    COMPUTE Target2=99. 
END IF. 
0

你的語法不工作的原因是您正在使用的第二個條件:
IF ((Keep_Find_Improve~= 1) & ...
當第一個條件不符合時,Keep_Find_Improve仍然丟失,因此不符合的條件3210。 同樣的事情發生在IF (Keep_Any~=1 & Keep_Any~=2)以後。 所以,你不應該比較Keep_Find_Improve 1或2,你應該檢查,如果它已經收到了值,或者如果它仍然缺少:

IF (Keep_Any=1 OR Find_Any=1 OR Improve_Any=1) Keep_Find_Improve=1. 
IF (missing(Keep_Find_Improve) & (Keep_Any=2 | Find_Any=2 | Improve_Any=2)) Keep_Find_Improve=2. 
IF missing(Keep_Find_Improve) Keep_Find_Improve=99. 
* alternatively: recode Keep_Find_Improve(miss=99). 
EXECUTE. 

這一切都被說,我推薦你使用更高級的代碼@JigneshSutar建議。

+0

非常感謝! '如果'的陳述似乎已經成功了。我認爲它可能需要這樣的東西,但不知道如何寫出它的語法。再次感謝! – Rachael

+0

@Rachael,當在StackOverflow中問一個問題時,你應該提供任何你認爲有用的答案,並選擇你實際用作解決方案的答案 - 以便爲後面的用戶提供類似問題。 –