spss - 我可以避免在 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,这样用户只需硬编码几个文件夹位置,但这并不理想——我真的希望用户根本不编辑语法。
提前致谢!
解决方案
遵循完全自动化过程的想法 - 假设您需要在其上运行代码的特定文件名,并且您正在搜索的文件夹中仅存在一个副本,则以下代码将起作用。这可以直接在驱动器上运行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.