【发布时间】:2015-01-18 14:35:52
【问题描述】:
我有一堆 SPSS 数据和语法文件,我每天都在移动,更改文件夹。但是,相对路径保持不变。 有没有办法利用这个事实? 例如:使用 INCLUDE 命令并引用一个总是向上一级路径的语法文件;或使用 GET 打开文件,位于 UP 两层
四处搜索,我发现了一些对 HOST 命令的引用,但我并没有让它工作。
任何意见将不胜感激:)
提前非常感谢
【问题讨论】:
我有一堆 SPSS 数据和语法文件,我每天都在移动,更改文件夹。但是,相对路径保持不变。 有没有办法利用这个事实? 例如:使用 INCLUDE 命令并引用一个总是向上一级路径的语法文件;或使用 GET 打开文件,位于 UP 两层
四处搜索,我发现了一些对 HOST 命令的引用,但我并没有让它工作。
任何意见将不胜感激:)
提前非常感谢
【问题讨论】:
您可以使用 python 获取 SPSS 语法的相对路径(前提是已保存)。
SpssClient.GetDesignatedSyntaxDoc().GetDocumentPath()
然后,您可以使用 python 的 os 模块(或其他方式)导航到您想要的任何文件夹。下面是检索语法的已保存文件位置以及接下来的两个级别的示例。它还返回一个宏,其中包含以字符串形式存储的相关文件夹路径,以便以后可以在 SPSS 命令(例如 GET、INCLUDE 等)中使用它们。
* Run this in any saved SPSS syntax to test *.
begin program.
import spss,spssaux,SpssClient, os
SpssClient.StartClient()
synPathL0U = os.path.dirname(SpssClient.GetDesignatedSyntaxDoc().GetDocumentPath())
SpssClient.StopClient()
synPathL1U=os.path.dirname(synPathL0U)
synPathL2U=os.path.dirname(synPathL1U)
print "synPathL0U =",synPathL0U
print "synPathL1U =",synPathL1U
print "synPathL2U =",synPathL2U
spss.SetMacroValue("!synPathL0U",spssaux._smartquote(synPathL0U+"\\"))
spss.SetMacroValue("!synPathL1U",spssaux._smartquote(synPathL1U+"\\"))
spss.SetMacroValue("!synPathL2U",spssaux._smartquote(synPathL2U+"\\"))
end program.
/* Check results - Echo should relay back the desired folder paths */.
echo !synPathL0U.
echo !synPathL1U.
echo !synPathL2U.
一种巧妙的实现方式,将其全部封装在一个小的 custom extension command 中,因此要避免在所有语法中使用这种样板。
要做到这一点,很容易将BEGIN PROGRAM / END PROGRAM 之间的代码复制到函数Run(args) 到一个名为SET_JOB_CWD.py 的python 文件中。此处分配给文件的名称是相关的,稍后将用于调用此扩展命令。
所以SET_JOB_CWD.py 将包含:
def Run(args):
import spss,spssaux,SpssClient, os
SpssClient.StartClient()
synPathL0U = os.path.dirname(SpssClient.GetDesignatedSyntaxDoc().GetDocumentPath())
SpssClient.StopClient()
synPathL1U=os.path.dirname(synPathL0U)
synPathL2U=os.path.dirname(synPathL1U)
spss.SetMacroValue("!synPathL0U",spssaux._smartquote(synPathL0U+"\\"))
spss.SetMacroValue("!synPathL1U",spssaux._smartquote(synPathL1U+"\\"))
spss.SetMacroValue("!synPathL2U",spssaux._smartquote(synPathL2U+"\\"))
然后还创建一个相应的SET_JOB_CWD.xml 文件,其中包含以下代码:
<Command xmlns="http://xml.spss.com/extension" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="SET JOB CWD" Language="Python">
</Command>
这两个文件应该保存在您的扩展文件被路由到的任何地方(要知道这个文件夹位置在 SPSS 语法中运行SHOW EXTPATHS.,“EXTPATHS EXTENSIONS”显示的位置就是这个文件夹。
现在,只要您在 SPSS 中保存了语法。您可以简单地运行 SET JOB CWD.,它会返回 SPSS 宏 !synPathL0U,!synPathL1U,!synPathL2U,其中包含存储为字符串的相关文件夹位置。
【讨论】:
在 v21 中,(免费)Python 插件需要单独下载。它完全集成在 v22 中。
使用 Python 和 R Essentials,您可以获得一堆与本机命令类似的扩展命令,包括对话框界面。您可能会觉得有用的是 STATS OPEN PROJECT。它允许您定义一个项目或一组相关项目,并在启动或调用命令时自动加载或执行辅助文件。
在 v21-22 中,您需要从 SPSS 社区网站安装它。如有需要,可提供更多详细信息。
顺便说一句,我会避免使用 INCLUDE 命令。使用较新的 INSERT 命令。它可以为你做一些目录技巧。
【讨论】: