更容易使用spss中的循环和向量来组合变量

时间:2016-05-29 18:43:36

标签: loops spss

我有一名学生在网上进行的一项调查中收集了数据,其中每个响应都被赋予一个变量,而不是变量具有任何响应。我们需要一个读取语句和集成的评分算法。我可以使用每个项目的IF语句来完成此操作,例如,

if Q1_1=1 var1=1.
if Q1_2=1 var1=2.
if Q1_3=1 var1=3.
if Q1_4=1 var1=4.

为200项调查(现在更像是1000)执行此操作将是一个拖累,除非自动化,否则会受到许多错别字的影响。我在SPSS中没有矢量和循环的经验,但有些阅读表明这是解决问题的方法。

我想将if语句运行为(伪代码):

for items=1 1 to 30
for responses=1 to 4
  if Q1_2_1=1 a=1.
  if Q1_2=1 a=2.
  if Q1_3=1 a=3.
  if Q1_4=1 a=4.
compute newitem(items)=a.
next response.
next item.

我希望能产生一个新的变量(newitem1到30),它有4个响应中的一个,它的原始对应的4个变量信息。

之前从未写过严重的spss代码:请指教!

1 个答案:

答案 0 :(得分:1)

这将完成工作:

* creating some sample data.    
data list free (",")/Item1_1 to Item1_4 Item2_1 to Item2_4 Item3_1 to Item3_4.
begin data
1,,,,,1,,,,,1,,
,1,,,1,,,,1,,,,
,,,1,,,1,,,,,1,
end data.

* now looping over the items and constructing the "NewItems".
do repeat Item1=Item1_1 to Item1_4
    /Item2=Item2_1 to Item2_4
    /Item3=Item3_1 to Item3_4
    /Val=1 to 4.
  if Item1=1 NewItem1=Val.
  if Item2=1 NewItem2=Val.
  if Item3=1 NewItem3=Val.
end repeat.
execute.

通过这种方式,您可以同时运行所有循环。

注意" ItemX_1到ItemX_4"只有当这四个变量在数据集中是连续的时才会起作用。如果它们不是,则必须单独命名每个 - " ItemX_1 ItemX_2 ItemX_3 itemX_4"。

现在,如果你有许多这样的项目集,所有项目都是如例子中那样定期命名,则以下宏可以缩短过程:

define !DoItems (ItemList=!cmdend)
 !do !Item !in (!ItemList)
   do repeat !Item=!concat(!Item,"_1") !concat(!Item,"_2") !concat(!Item,"_3") !concat(!Item,"_4")/Val=1 2 3 4.
     if !item=1 !concat("New",!Item)=Val.
   end repeat.
 !doend
 execute.
!enddefine.

* now you just have to call the macro and list all your Item names:
!DoItems ItemList=Item1 Item2 Item3.

宏将与任何项目名称一起使用,只要变量名为ItemName_1,ItemName_2等等。