2016-05-11 137 views
1

我希望能够遍历SPSS一系列类似的命名变量的循环,只是改变了几个参数。例如,我有变量通过动态变量名

q7_22_react_a q7_22_react_b q7_22_react_c q7_2 _react_a q7_2 _react_b q7_2 _react_c

通知的编号和字母的变化。我试过这个,但是它不能很好地解析“7_22”:

define !test (numbers= !chardend('/')/letters= !cmdend). 
!do !i !in (!numbers) 
    frequencies variables !concat(q,!i,'_react_',!letters) 
!doend 
!enddefine. 

!test numbers= 7_22/letters= a. 

想法?

+0

尼斯一个上会出现一个对话框!之前没有遇到这个问题......我检查了更多,发现令牌如果以数字或下划线开头就会分裂。 –

回答

1

我不知道是否有一个真正的解决办法,但我能想到的几个解决方法的。这个想法是防止令牌从越来越分裂 - 无论是用字母开头的:

define !test2 (numbers= !chardend('/')/letters= !cmdend). 
!do !i !in (!numbers) 
    frequencies variables !concat(!i,'_react_',!letters) 
!doend 
!enddefine. 

!test2 numbers= q7_22/letters= a. 

或通过添加引号:

define !test3 (numbers= !chardend('/')/letters= !cmdend). 
!do !i !in (!numbers) 
    frequencies variables !concat('q',!unquote(!i),'_react_',!letters) 
!doend 
!enddefine. 

!test3 numbers= '7_22'/letters= a. 
+0

谢谢。我试着用类似的命名规则解决了问题并取得了成功。 我偶然发现了一个旧的IBM线程,它看起来像宏列表中有下划线时,SPSS会将它作为不同的变量分开。真正的痛苦,但可以解决。 – vashts85

1

这里有一个简单的解决方案。

SPSSINC SELECT VARIABLES MACRONAME =“!react” /PROPERTIES PATTERN =“。* react”。

频率!反应。

的图案是一个正则表达式 - 在这里,其中包括“反应”的任何名称。 SPSSINC SELECT VARIABLES是一种扩展命令,通常与最新版本的统计信息一起安装,或可从SPSS社区站点获取。它有一个实用程序菜单

1
define !test (numbers= !chardend('/')/letters= !cmdend). 
    !do !i !in (!numbers) 
     frequencies variables !concat(q,!UNQUOTE(!i),'_react_',!letters). 
    !doend 
!enddefine. 
SET MPRINT ON. 
!test numbers= '7_22'/letters= a. 

Resulting Syntax ;-))) 
frequencies variables q7_22_react_a.