我有一堆SPSS数据和语法文件,我正在移动,每天更换文件夹。但是,相对路径保持不变。 有没有办法利用这个事实? 例如:使用INCLUDE命令并引用一个始终为一个路径级别的语法文件;或使用GET打开一个文件,位于两个级别UP
谷歌搜索我发现了一些HOST命令的参考,但我没有让它工作。
任何意见都将受到赞赏:)
提前多多感谢
答案 0 :(得分:5)
您可以使用python获取SPSS语法的相对路径(假设已保存)。
SpssClient.GetDesignatedSyntaxDoc().GetDocumentPath()
然后,您可以使用蟒蛇导航到您想要的任何文件夹。 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.
,显示为&#34; EXTPATHS EXTENSIONS&#34;的位置就是此文件夹。
现在,只要您在SPSS中保存语法。您只需运行SET JOB CWD.
即可返回包含存储为字符串的相关文件夹位置的SPSS宏!synPathL0U
,!synPathL1U
,!synPathL2U
。
答案 1 :(得分:1)
在v21中,(免费)Python插件是单独下载的。它完全集成在第22版。
使用Python和R Essentials,您可以获得一些扩展命令,它们像本机命令一样工作,包括一个对话框界面。你可能会觉得有用的是STATS OPEN PROJECT。它允许您定义项目或一组相关项目,并在启动时或调用命令时自动加载或执行辅助文件。
在v21-22中,您需要从SPSS社区网站安装。如果需要,可提供更多详细信息。
我会避免使用INCLUDE命令BTW。使用较新的INSERT命令。它可以为你做一些目录技巧。