临时变量

您可以使用 临时变量 来促进变换块和输入程序中的操作。

  • 要创建临时变量,请指定以 # 字符开头的变量名称,例如 #ID。 临时变量可以是数字或字符串。
  • 对于数字变量,将临时变量初始化为 0 ,对于字符串变量,将其初始化为空白。
  • 临时变量不能在过程中使用,也不能保存在数据文件中 (但可以使用 PRINTWRITE将其写入外部文本文件)。
  • 无法为临时变量分配缺失值,变量标签或值标签。
  • 可以在过程之间创建临时变量,但在下一个过程开始时将始终废弃这些变量。
  • 一旦指定了 TEMPORARY 命令,就会废弃临时变量。
  • 关键字 TO 不能同时引用临时变量和永久变量。
  • 不能在 WEIGHT 命令上指定临时变量。
  • 无法在 LEAVE 命令上指定 scratch 变量。
  • 读取新案例时,不会重新初始化临时变量。 它们的值始终跨个案进行。 (因此,使用临时变量基本上等同于使用 LEAVE 命令。)

由于废弃了临时变量,因此它们通常用作循环索引变量以及不需要在变换块末尾保留的其他变量。 请参阅主题 Indexing 子句 (LOOP-END LOOP 命令) 以获取更多信息。 因为不会为每个个案重新初始化临时变量,所以它们在输入程序中跨个案的循环中也很有用。 请参阅主题 创建数据 (LOOP-END LOOP 命令) 以获取更多信息。

示例

DATA LIST LIST (",") /Name (A15).
BEGIN DATA
Nick Lowe
Dave Edmunds
END DATA.
STRING LastName (A15).
COMPUTE #index=INDEX(Name, " ").
COMPUTE LastName=SUBSTR(Name, #index+1).
LIST.
图 1。 案例值列表
Name            LastName

Nick Lowe       Lowe
Dave Edmunds    Edmunds
  • #index 是一个临时变量,设置为 名称中首次出现空格的数字位置。
  • 然后,在第二个 COMPUTE 命令中使用 scratch 变量来确定 LastNameName中的起始位置。
  • 缺省 LIST 命令将列出所有个案的所有变量的值。 它不包含 #index ,因为 LIST 是读取数据的过程,并且在该点废弃所有临时变量。

在此示例中,您可以使用以下方法在没有 scratch 变量的情况下获取相同的最终结果:

COMPUTE LastName=SUBSTR(Name, INDEX(Name, " ")+1).

这里使用 scratch 变量只是让代码更容易读取。

示例: 临时变量初始化

DATA LIST FREE /Var1.
BEGIN DATA
2 2 2
END DATA.
COMPUTE Var2=Var1+Var2.
COMPUTE Var3=0.
COMPUTE Var3=Var1+Var3.
COMPUTE #ScratchVar=Var1+#ScratchVar.
COMPUTE Var4=#ScratchVar.
LIST.
图 2。 案例值列表
    Var1     Var2     Var3     Var4

    2.00      .       2.00     2.00
    2.00      .       2.00     4.00
    2.00      .       2.00     6.00
  • 新变量 Var2 将重新初始化为每个观测值的系统缺失值,因此 Var1+Var2 始终导致系统缺失。
  • 对于每个个案 (COMPUTE Var3=0) ,新变量 Var3 将重置为 0 ,因此 Var1+Var3 始终等同于 Var1+0
  • 在第一种情况下 #ScratchVar 初始化为 0,在后续情况下不再重新初始化;因此,在第一种情况下, Var1+#ScratchVar 相当于 Var1+0 ,在第二种情况下相当于 Var1+2 ,在第三种情况下相当于 Var1+4
  • 在本例中 Var4 被设置为 #ScratchVar ,以便在案例列表中显示该值。

在此示例中,命令:

COMPUTE #ScratchVar=Var1+#ScratchVar. 
COMPUTE Var4=#ScratchVar.

等价于:

COMPUTE Var4=Var1+Var4.
LEAVE Var4.