我有一名学生在网上进行的一项调查中收集了数据,其中每个响应都被赋予一个变量,而不是变量具有任何响应。我们需要一个读取语句和集成的评分算法。我可以使用每个项目的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代码:请指教!
答案 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等等。