2015-02-09 359 views

回答

3

你可以嘗試這樣的事:

/*************************************/. 
DATA LIST FREE /v1 v2 v3 v4 v5. 
BEGIN DATA 
1 2 99 4 5 
99 2 3 99 5 
1 99 3 4 5 
1 2 99 99 5 
1 99 99 99 5 
99 2 99 99 99 
END DATA. 
DATASET NAME DS1. 
/*************************************/. 
/* Solution1: Assumes v1 to v5 can hold any value from 1 to 5 */. 
recode v1 to v5 (99,sysmis=sysmis) (else=copy). 
do repeat v=v1 to v5. 
if (any(v,1,4,5)) Target1=1. 
if (any(v,2,3)) Target2=2. 
end repeat. 
compute TargetA=sum(Target1,Target2). 

/* Solution2: Alternative solution which assumes v1 holds values 1 only v2 values 2 only ect... */. 
recode v1 to v5 (99,sysmis=sysmis) (else=1). 
compute TargetB=sum(any(1,v1,v4,v5)*1, any(1,v2,v3)*2). 
exe. 
0

如果我理解正確:

  • 你的輸入文件中包含5列,每通道1個
  • 每個特定通道中填入與通道專用標識符(1-5)
  • 當該列爲空時,該通道未被使用/與該觀察無關
  • 你想 您要使用的IF語句在SPSS語法

以上答案由JigneshSutar似乎並沒有做到這一點總結在新的領域(NewVar)使用的信道組合。此外,您不需要做重複,循環,而且可以在3線做到這一點(+執行。)語法(使用數據發生器由JigneshSutar答案):

IF (V1 = 1 & V4 = 4 & V5 = 5) NewVar = 1. 
IF (V2 = 2 & V3 = 3) NewVar = 2. 
IF (V1 = 1 & V2 = 2 & V3 = 3 & V4 = 4 & V5 = 5) NewVar = 3. 
EXECUTE. 

這句法可以很容易地

IF (MISSING(V1)=0 & MISSING(V4)=0 & MISSING(V5)=0) NewVar = 1. 
IF (MISSING(V2)=0 & MISSING(V3)=0) NewVar = 2. 
IF (MISSING(V1)=0 & MISSING(V2)=0 & MISSING(V3)=0& MISSING(V4)=0 & MISSING(V5)=0) NewVar = 3. 
EXECUTE. 
+0

第一/初始我張貼溶液使得假設VAR1到VAR5可容納*:通過使用缺少的功能進行調整,當信道的列填充有比所述信道標識符[1-5],例如其他值* 1-5之間的任何**值,儘管給出的示例數據可能暗示了其他情況。否則解決方案將是IF邏輯的直接使用。如果數據按照您的假設進行存儲,那麼這是非常糟糕的數據呈現,應該重新編碼,我更新我的帖子以爲此提出解決方案。 – 2015-02-23 11:41:46

相關問題