【问题标题】:Design matrix macro interpretation设计矩阵宏解释
【发布时间】:2019-08-21 15:44:04
【问题描述】:

在研究了 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?

【问题讨论】:

    标签: spss spss-modeler


    【解决方案1】:

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

    【讨论】:

    • 那么第一个 DO-DOEND 中的代码只是开始循环,在这种情况下是两个循环,然后实际上执行了循环?
    • vectordo repeat 命令是循环的实际主体 - 它们将在每次运行内循环时运行一次,每次运行外循环时将重复一次(因为在这种情况下只有两个循环)
    • 使用set mprint=on 查看宏创建的实际语法(在输出中),它应该使解释更容易。
    猜你喜欢
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 2013-07-02
    • 2022-08-14
    • 2012-04-18
    • 2013-10-07
    相关资源
    最近更新 更多