我有一个包含数千个文件路径的excel工作表。我已经将它们导入到spss数据集中。目标是重命名这些路径中的所有文件。我的计划是运行大量的GET FILE
/ SAVE OUTFILE
循环以完成任务。我已经有99%可以使用的代码。
问题是文件路径不从excel导入且带有引号。因此,当我运行GET
/ SAVE
宏时,文件路径周围没有引号,并且GET FILE
无法运行。我想不出在文件路径周围添加引号的最佳方法。
这是我用于循环的宏代码。可能不是最有效的,但是它可以满足我的需求。
SET MPRINT=no.
DEFINE !GETPATH (FPATH=!TOKENS(1)
/VARG=!TOKENS(1)
/VARS=!TOKENS(1))
GET FILE=!FPATH.
COMPUTE nobreak=1.
AGGREGATE
/OUTFILE=*
/BREAK=!VARG !VARS
/nbval = N(nobreak).
COMPUTE nobreak=1.
MATCH FILES FILE=* /BY nobreak /LAST=last.
DO IF $CASENUM=1.
- WRITE OUTFILE='a file path here\getsave.sps' / 'GET ' 'FILE ' !VARG'.'.
- WRITE OUTFILE='a file path here\getsave.sps' / 'SAVE ' 'OUTFILE ' !VARS'.'.
ELSE IF NOT last.
- WRITE OUTFILE='a file path here\getsave.sps' / 'GET ' 'FILE ' !VARG'.'.
- WRITE OUTFILE='a file path here\getsave.sps' / 'SAVE ' 'OUTFILE ' !VARS'.'.
ELSE.
- WRITE OUTFILE='a file path here\getsave.sps' / 'GET ' 'FILE ' !VARG'.'.
- WRITE OUTFILE='a file path here\getsave.sps' / 'SAVE ' 'OUTFILE ' !VARS'.'.
ELSE.
END IF.
EXECUTE.
GET FILE=!FPATH.
INCLUDE 'a file path here\getsave.sps'.
!ENDDEFINE.
!GETPATH
FPATH ='filepath to dataset holding the filepaths\Data5.sav'
VARG =GetFile
VARS =SaveOutFile.
GetFile和SaveOutFile是保存相应文件路径的变量名。
我尝试以各种方式使用!QUOTE()
和!CONCAT()
命令,例如:
/BREAK=!VARG !VARS
'GET ' 'FILE ' !QUOTE(!VARG) '.'.
!LET !VAR1 = !QUOTE(!VARG)
!QUOTE(!CONCAT(!UNQUOTE(GET ), !UNQUOTE(FILE ), !VARG))'.'.
但是,我似乎无法找到解决之道。
我希望看到的是一个具有
多次迭代的文件GET FILE "abc.sav".
SAVE OUTFILE "xyz.sav".
我可以跑步。
感谢任何可以提供帮助的人!
答案 0 :(得分:1)
您可以在write out
命令中将引号添加为非动态文本的一部分:
WRITE OUTFILE='a file path here\getsave.sps' / 'GET FILE="' !VARG '".' .
顺便说一句,无需将其包装在宏中即可使用。
除非您有一些包含列表的文件,并且除非有理由在列表的第一行,中间行和最后一行之间进行区分,否则整个过程可以这样完成:
GET FILE="path\your file with the list.sav".
AGGREGATE / OUTFILE=* / BREAK=OrigName TargenName / n=n.
WRITE OUTFILE='a file path here\getsave.sps' / 'GET FILE="' OrigName '".'
/ 'SAVE OUTFILE= "' TargenName '".' .
EXECUTE.
insert file='a file path here\getsave.sps'.