Loops 通过动态变量名循环

Loops 通过动态变量名循环,loops,macros,spss,Loops,Macros,Spss,我希望能够在SPSS中循环使用一系列类似命名的变量,只需更改一些参数。例如,我有变量 问题7_22_反应_a 问题7_22_反应_b 问题7_22_反应_c q7\u 23\u反应\u a q7_23\u反应 q7_23\u反应 请注意编号和字母的更改。我试过这个,但它不能很好地解析“7_22”: define !test (numbers= !chardend('/') / letters= !cmdend). !do !i !in (!numbers) frequencies vari

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

问题7_22_反应_a 问题7_22_反应_b 问题7_22_反应_c q7\u 23\u反应\u a q7_23\u反应 q7_23\u反应

请注意编号和字母的更改。我试过这个,但它不能很好地解析“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.

想法?

我不知道是否有真正的解决办法,但我可以想出一些变通办法。这样做的目的是防止令牌被拆分——或者以字母开头:

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.

我不知道是否有真正的解决办法,但我可以想出一些变通办法。这样做的目的是防止令牌被拆分——或者以字母开头:

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.

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

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

freq !react.
模式是一个正则表达式——这里是包含“react”的任何名称。
SPSSINC SELECT VARIABLES是一个扩展命令,通常随统计信息一起安装在最新版本中,或可从SPSS社区站点获得。它有一个对话框出现在实用程序菜单上

下面是一个简单的解决方案

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

freq !react.
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.
模式是一个正则表达式——这里是包含“react”的任何名称。
SPSSINC SELECT VARIABLES是一个扩展命令,通常随统计信息一起安装在最新版本中,或可从SPSS社区站点获得。它有一个出现在实用程序菜单上的对话框

Nice one!以前没有遇到过这个。。。我又检查了一些,发现如果令牌以数字或下划线开头,就会被拆分。很好!以前没有遇到过这个。。。我又检查了一些,发现如果令牌以数字或下划线开头,就会被拆分。谢谢。我尝试并成功地解决了命名约定的类似问题。我偶然发现了一个旧的IBM线程,它看起来像是当宏列表中有下划线时,SPSS会将其作为不同的变量分开。真的很痛苦,但可以解决。谢谢。我尝试并成功地解决了命名约定的类似问题。我偶然发现了一个旧的IBM线程,它看起来像是当宏列表中有下划线时,SPSS会将其作为不同的变量分开。真正的痛苦,但可以解决。
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.