我有一组教师,在第1年和第5年分配给最多6所学校。我想看看第1年的学校代码是否与5年级的学校代码相同基本上,我希望看看教师是否将学校从1年级改为5年级,但我希望确保我能够查看所有学校代码,而不仅仅是每年列出的第一所学校。是否有命令将一组变量的值与另一组变量中的值进行比较?我想象矢量和循环可能有所帮助,但我以前没有使用它们。最后,我想把教师分为推动者(那些在5年级搬到另一所学校的人)和住宿者(那些在5年级和第1年一样留在同一所学校的人)。
数据的结构使得每一行都是教师;每所学校有多个栏目,按年份编制索引(例如,2012年学校1,2012年学校2,2016年学校1,2016年学校2等栏目。)
答案 0 :(得分:1)
您可以使用几种方法来比较多个变量 - 基本上是ANY
函数,循环命令(LOOP
和DO REPEAT
)和重组命令。
以下是两个示例,使用名为Yr1School1,Yr1School2 .... Yr5School1,Yr5School2的学校ID ....您当然可以使用自己的变量名称,只需确保以相同的方式订购 - 如果他们不是,您必须列出命令中的所有名称,而不是像Yr1School1 TO Yr1School6
中那样使用“TO”。
此示例将循环与ANY函数组合在一起:
compute SchoolRepeats=0.
do repeat Year1SchoolID=Yr1School1 to Yr1School6.
if any(Year1SchoolID,Yr5School1 to Yr5School6) SchoolRepeats = SchoolRepeats + 1.
end repeat.
execute.
执行后,变量SchoolRepeats将包含第1年和第5年出现的学校数量。
在此示例中,文件已重新构建,以便每个比较都在一个单独的行中(每个教师ID有6X6 = 36行),现在不需要循环:
varstocases/make Year1SchoolID from Yr1School1 to Yr1School6/index=Yr1Index(Year1SchoolID).
varstocases/make Year5SchoolID from Yr5School1 to Yr5School6/index=Yr5Index(Year5SchoolID).
compute SchoolRepeat=(Year1SchoolID = Year5SchoolID).
DATASET DECLARE SumRepeats.
AGGREGATE /OUTFILE='SumRepeats' /BREAK=TeacherID /SchoolRepeats=SUM(SchoolRepeat).
新数据集现在具有每个教师ID的重复数量。