在SPSS中,在BEGIN和END PROGRAM命令中使用Python创建的任何变量都将存储在内存中以用于其余语法。但是,如果从另一个Python命令从不同的语法调用语法,则创建的Python变量将仅存在于创建它的BEGIN和END程序中。例如:
在调用程序的SPSS插入脚本中:
BEGIN PROGRAM.
import spss
spss.Submit ('''
INSERT FILE = '~~FILELOCATION~~'
SYNTAX=INTERACTIVE ERROR=CONTINUE CD=NO.
''')
END PROGRAM.
在~~文件位置~~被叫:
BEGIN PROGRAM.
firstvar = "34"
END PROGRAM.
BEGIN PROGRAM.
secondvar = "23"
print(firstvar + secondvar)
END PROGRAM.
如果后一个脚本是从第一个程序的insert file命令运行的,那么结果是firstvar不会被转移到第二个BEGIN PROGRAM中。
有没有办法将此变量存储在Python程序的内存中,该内存开始用于插入文件,因为此处的任何变量都将存在于整个插入的语法中?如果这不可能,那么在插入文件命令中将在一个Python脚本中创建的变量传递给另一个Python脚本的最佳方法是什么。
我希望这是有道理的,如果您有任何问题要澄清问题,请告诉我。
答案 0 :(得分:1)
第一个程序正在创建一个名为firstvar的局部变量。您可以通过将其明确分配给其模块,将其保留到第二个程序中。这比将变量抛入全局变量更有序。
import sys
sys.modules [__ name __] .firstvar = 34
并将其称为
sys.modules中[__名__]。firstvar
在第二个计划中。
答案 1 :(得分:0)
对我来说效果很好(尽管有很小的变化)。
这是输出日志中的打印件:
insert file="c:\temp\pytest.sps".
44 0 * Encoding: windows-1252.
45 0 BEGIN PROGRAM.
46 0 firstvar = "34"
47 0 print firstvar
34
47 0 END PROGRAM.
48 0
49 0 BEGIN PROGRAM.
50 0 secondvar = "23"
51 0 print secondvar
23
51 0 END PROGRAM.
52 0
53 0 * End of INSERT and INCLUDE nesting level 01.
BEGIN PROGRAM.
print firstvar
print secondvar
END PROGRAM.
34
23
我现在也可以复制这个问题而且也很惊讶地注意到了。然而,有一个简单的解决方案是将python变量定义为globals
。
BEGIN PROGRAM.
global firstvar
firstvar = "34"
END PROGRAM.