【问题标题】:looping through dynamic variable names循环遍历动态变量名
【发布时间】:2016-05-11 18:53:37
【问题描述】:

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

q7_22_react_a q7_22_react_b q7_22_react_c q7_23_react_a q7_23_react_b q7_23_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.

想法?

【问题讨论】:

  • 不错的一个!以前没有遇到过这个......我检查了更多,发现如果令牌以数字或下划线开头,它们就会被拆分。

标签: loops macros spss


【解决方案1】:

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

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

freq !react.

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

【讨论】:

    【解决方案2】:

    我不知道是否有真正的解决方案,但我可以想到几个解决方法。想法是防止令牌被拆分 - 要么以字母开头:

    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.
    

    【讨论】:

    • 谢谢。我尝试使用命名约定的类似解决方法并取得成功。我偶然发现了一个旧的 IBM 线程,看起来当宏列表中有下划线时,SPSS 会将其分隔为不同的变量。一个真正的痛苦,但可以解决。
    【解决方案3】:
    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.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-07
      • 2013-05-18
      • 2015-06-09
      • 2021-04-24
      • 1970-01-01
      • 2019-01-28
      相关资源
      最近更新 更多