【问题标题】:SPSS syntax - use path of the fileSPSS语法 - 使用文件的路径
【发布时间】:2015-01-18 14:35:52
【问题描述】:

我有一堆 SPSS 数据和语法文件,我每天都在移动,更改文件夹。但是,相对路径保持不变。 有没有办法利用这个事实? 例如:使用 INCLUDE 命令并引用一个总是向上一级路径的语法文件;或使用 GET 打开文件,位于 UP 两层

四处搜索,我发现了一些对 HOST 命令的引用,但我并没有让它工作。

任何意见将不胜感激:)

提前非常感谢

【问题讨论】:

    标签: syntax path spss


    【解决方案1】:

    您可以使用 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,其中包含存储为字符串的相关文件夹位置。

    【讨论】:

    • 非常感谢您的回复,我明白了。不过小问题:看起来我没有安装 Python 插件,这是运行代码所必需的...... :(
    • 您使用的是哪个版本的 SPSS?
    • 我使用的是版本 21;根据 [IBM],它应该包含在安装介质中,但我没有管理员权限 :)
    • 在安装SPSS时,可能选择不安装python插件。但可以重新安装。我建议获得 IT 部门的许可才能执行此操作,这样您就可以更轻松、更高效地完成 SPSS 任务,就像您尝试使用相对路径一样。
    • 是的,我将不得不与管理员讨论这个问题。无论如何,非常感谢!
    【解决方案2】:

    在 v21 中,(免费)Python 插件需要单独下载。它完全集成在 v22 中。

    使用 Python 和 R Essentials,您可以获得一堆与本机命令类似的扩展命令,包括对话框界面。您可能会觉得有用的是 STATS OPEN PROJECT。它允许您定义一个项目或一组相关项目,并在启动或调用命令时自动加载或执行辅助文件。

    在 v21-22 中,您需要从 SPSS 社区网站安装它。如有需要,可提供更多详细信息。

    顺便说一句,我会避免使用 INCLUDE 命令。使用较新的 INSERT 命令。它可以为你做一些目录技巧。

    【讨论】:

      猜你喜欢
      • 2023-03-05
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 2010-10-31
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多