循环通过共享相同前缀的一组变量

时间:2018-02-19 17:49:47

标签: spss

我经常使用学生考试文件,其中每个对考试项目的回复都以分数记录。我想将该变量转换为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_为前缀的变量执行此转换?

1 个答案:

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