【问题标题】:Looping through a set of variables sharing the same prefix循环通过一组共享相同前缀的变量
【发布时间】:2018-07-30 00:12:58
【问题描述】:

我经常处理学生考试文件,其中对考试项目的每个回答都以分数记录。我想将该变量转换为 1 或 0(有效地将每个项目减少为正确或不正确)。

每个数据集都有相同的命名法,其中变量以 points_ 为前缀,然后是一个标识号(例如,points_18616)。我正在使用以下语法:

RECODE points_18616 (0=Copy) (SYSMIS=SYSMIS) (ELSE=1) INTO Binary_18616.
VARIABLE LABELS  Binary_18616 'Binary Conversion of Item_18616'.
EXECUTE.

所以我最终为每个变量创建了这个语法,并且由于每个数据集都不同,所以它变得乏味。有没有办法遍历数据集并对所有前缀为 points_ 的变量执行此转换?

【问题讨论】:

    标签: macros spss


    【解决方案1】:

    这是一种方法:

    首先,我将创建一些假数据来演示:

    data list list/points_18616 points_18617 points_18618 points_18619 (4f2).
    begin data
    4 5 6 7
    5 6 7 8
    6 7 8 9
    7 8 9 9
    end data.
    
    * the following code will create a list of all the relevant variables in a new file.
    SPSSINC SELECT VARIABLES MACRONAME="!list" /PROPERTIES  PATTERN = "points_*".
    
    * now we'll use the created list in a macro to loop your syntax over all the vars.    
    define !doList ()
    !do !lst !in(!eval(!list))
    RECODE !lst (0=Copy) (SYSMIS=SYSMIS) (ELSE=1) INTO !concat("Binary", !substr(!lst,7)).
    VARIABLE LABELS  !concat("Binary", !substr(!lst,7))  !concat("'Binary Conversion of Item",!substr(!lst,7) ,"'.").
    !doend
    !enddefine.
    
    !doList.
    EXECUTE.
    

    【讨论】:

    • eli-k,我不知道你是怎么想出这些东西的。我正在测试一些文件的语法并且它有效——但我发现我也有更短的变量:points_1234 而不是 points_12345。我可以修改你的宏并运行它两次(它只会抛出一些错误),但是有没有办法修改你的语法来捕获这两种类型的变量?如有必要,我可以作为新问题发布。感激不尽,这已经为我节省了大量时间!
    • 没问题 - 查看编辑后的宏定义,它现在可以处理任意长度的数字代码(只要前缀相同)
    • 我知道我不应该仅仅为了表示感谢而发表评论,但这是一个巨大的帮助,而且效果很好!
    猜你喜欢
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多