Loops 通过循环识别不同滞后值的SPSS

Loops 通过循环识别不同滞后值的SPSS,loops,lag,spss,Loops,Lag,Spss,我有两个变量的数据集:week和brand_Selected,其中brand Selected表示选择了超市中的哪种产品,看起来是这样的 Week brand_chosen 2 19 2 15 2 50 2 12 3 19 3 16 3 50 4 77 4 19 我试着为每一行做的是

我有两个变量的数据集:week和brand_Selected,其中brand Selected表示选择了超市中的哪种产品,看起来是这样的

Week     brand_chosen
 2           19
 2           15    
 2           50
 2           12
 3           19
 3           16
 3           50
 4           77
 4           19
我试着为每一行做的是,记下购买品牌的那一周,并检查在那之前的一周是否购买了相同的品牌。如果是,则变量伪值将取1,否则取0。
因为week出现多次,我不能只考虑滞后(week,1),所以我可能需要循环每个情况下的week变量,直到它找到第一个不同的值

这就是我试图做的

loop i=1 to 70.  
   do if (week<>lag(week,i) and brand_chosen=lag(brand_chosen,i)).  
      compute dummy=1.  
   end loop.  
   else.  
      compute dummy=0.  
   end if.  
end loop.  
execute.
循环i=1到70。
如果(周(周,i)和品牌选择=滞后(品牌选择,i))。
计算虚拟=1。
结束循环。
其他的
计算虚拟=0。
结束如果。
结束循环。
执行。
其中70只是一个任意数字,因此我确信它将检查以前的所有案例。 我有两个问题。首先,根据我的理解,滞后函数需要包含一个数字,但这里不认为“I”是一个数字。
第二个问题是,如果条件满足,我想关闭循环,然后转到下一个情况,但我得到了一个错误


我不熟悉spss语法,我正在努力解决这个问题,因此非常感谢您的帮助。

我假设每周选择的每个组合——品牌都是独一无二的。在这种情况下,解决方案非常简单。只需按所选品牌重新排序数据集,然后按周排序,然后运行一个简单的lag命令

这应该可以做到:

SORT CASES BY brand_chosen week.
COMPUTE dummy=0.
IF (brand_chosen=LAG(brand_chosen) AND week>LAG(week)) dummy = 1.

如果您为您的示例和/或循环的伪代码提供相应的输出,这可能会很有帮助。@lossleader我已经编辑了我的评论,提供了更多信息,如果有帮助的话。非常感谢您的回答。对不起,我应该提到的是,每一个星期的品牌组合都不是唯一的。因此,在一个场景中,两个连续案例具有相同的周和相同的品牌,只有这两个案例中的第一个案例的虚拟值为1。还有一点是,在某些情况下,一周可能从“第50周”变为“第56周”,因此周不会以连续的顺序出现。>“因此,在两个连续的案例具有相同的周和相同的品牌的情况下,只有这两个案例中的第一个将具有虚拟=1”如果这是您想要实现的输出,一切都很好,因为代码将完全做到这一点。>“另外,在某些情况下,一周可能从“第50周”变为“第56周”,因此周不会以连续顺序出现。”我在if语句中更改了运算符。希望这能满足您的需求。非常感谢您,它很有效。尽管我仍然好奇是否可以在上面的循环中使用LAG(week,I)中的“I”。感谢againI,我认为LAG(var,i)构造在宏循环中起作用。但我还没有测试过。