如何使用SPSS宏语法将引号连接到字符串上

时间:2019-08-02 02:12:32

标签: spss

我有一个包含数千个文件路径的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".

我可以跑步。

感谢任何可以提供帮助的人!

1 个答案:

答案 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'.