首页 > 解决方案 > 我可以避免在 SPSS 语法中硬编码文件位置吗?

问题描述

我正在使用 SPSS 25 语法打开和处理一组数据文件。我希望这些语法文件尽可能可移植。出于这个原因,我希望用户能够在运行时选择文件位置,而无需重新编码语法本身。

我正在运行 Windows 10,尽管希望这并不重要。我确实有 SPSS 的 Python 插件,尽管理想情况下这将是一个基本的 SPSS 语法解决方案。

现在在 SPSS 中,我正在这样做:

GET
  FILE='C:\Users\xkcd\studies\project\rawdata'+
    '\reallyraw\veryraw.sav'
    PASSWORD='CorrectHorseBatteryStaple'.
DATASET NAME Demo WINDOW=FRONT.

在 R 中,我会这样做:

message("Where is the veryraw.sav file?")
demo<-fread(file.choose())

理想情况下,用户将在运行时一次选择一个文件。不太理想的是,用户会选择一个文件夹,其中包含已知名称的所有文件。

我可以使用 FILE HANDLE,这样用户只需硬编码几个文件夹位置,但这并不理想——我真的希望用户根本不编辑语法。

提前致谢!

标签: spss

解决方案


遵循完全自动化过程的想法 - 假设您需要在其上运行代码的特定文件名,并且您正在搜索的文件夹中仅存在一个副本,则以下代码将起作用。这可以直接在驱动器上运行C:,但如果您可以缩小路径,则运行时间会少得多:

* this will create a text file that has the path of the required file.

HOST COMMAND=['dir /s /b "C:\Users\somename\*required file name.sav" > C:\Users\somename\tempname.sps'].

* now to read the name and put in in a handle.

DATA LIST file = "C:\Users\somename\tempname.sps" fixed / pth 1-500 (a).
exe.
string cmd(a500).
compute cmd=concat("file handle myfile / name='", rtrim(pth), "'.").
write out="C:\Users\somename\tempname.sps" /cmd.
exe.

* inserting the new syntax will activate the handle.

insert file = "C:\Users\somename\tempname.sps".

myfile现在您可以在语法中使用句柄,例如:

get file=myfile.

推荐阅读