循环遍历动态变量名称

时间:2016-05-11 18:53:37

标签: loops macros spss

我希望能够在SPSS中循环一系列类似命名的变量,只需更改一些参数即可。例如,我有变量

q7_22_react_a q7_22_react_b q7_22_react_c q7_2 3 _react_a q7_2 3 _react_b q7_2 3 _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.

思想?

3 个答案:

答案 0 :(得分:2)

这是一个简单的解决方案。

SPSSINC SELECT VARIABLES MACRONAME="!react"
/PROPERTIES  PATTERN = ".*react".

freq !react.

模式是正则表达式 - 这里包含"反应"的任何名称。 SPSSINC SELECT VARIABLES是一个扩展命令,通常在最新版本中安装Statistics或可从SPSS社区站点获得。它有一个出现在Utilities菜单上的对话框

答案 1 :(得分: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.

答案 2 :(得分: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.