1

在研究了 SPSS 书中的宏部分之后,我仍然无法理解这段代码为什么/如何工作

DEFINE !Combinations (Set = !TOKENS(1) 
                     /Len = !TOKENS(1) ) 
INPUT PROGRAM. 
!LET !Str = " ". 
!LET !LisVar = "". 
!DO !I = 1 !TO !Len 
  !LET !Ind = !CONCAT("#",!LENGTH(!Str)) 
  LOOP !Ind = 0 TO !Set. 
  !LET !Str = !CONCAT(!Str," ") 
  !LET !LisVar = !CONCAT(!LisVar," ",!Ind) 
!DOEND 
VECTOR X(!Len). 
DO REPEAT L = !LisVar /X = X1 TO !CONCAT("X",!Len). 
  COMPUTE X = L.
END REPEAT. 
END CASE. 
!DO !I = 1 !TO !Len 
  END LOOP. 
!DOEND 
END FILE. 
END INPUT PROGRAM. 
EXECUTE. 
!ENDDEFINE.

使用以下参数

!Combinations Set = 1 Len = 2. 

我会有两个循环(#1 和 #2)从 0 到 1,这会给我以下集合(0,0)(0,1)(1,0)(1,1),但我没有不明白是

i)第一个 !DOEND 不应该在循环之外?

ii) 为什么我需要这个

!DO !I = 1 !TO !Len 
  END LOOP. 

而不是一个简单的END LOOP?

4

1 回答 1

1

似乎重点不是单独loop运行!Len时间,而是要有一个层次!Len深的循环层次结构。所以宏首先启动循环,然后添加要在循环内运行的语法(在循环层次结构的底部),然后关闭所有循环。
这就是loop命令包含在!do宏循环中的原因, end loop command.

于 2019-08-21T17:09:47.507 回答