比较多个变量中的值

Comparing values within multiple variables

我有一个教师数据集,他们在第 1 年和第 5 年被分配到最多 6 所学校。我想看看第 1 年的学校代码是否与5 年级。本质上,我想看看老师是否从 1 年级换到了 5 年级,但我想确保我查看的是所有学校代码,而不仅仅是每年列出的第一所学校。是否有命令将一组变量的值与另一组变量中的值进行比较?我想向量和循环可能会有所帮助,但我以前没有使用过它们。最后,我想把老师分类为 movers(在第 5 年搬到另一所学校的人)和 stayers(那些在第 5 年和第 1 年留在同一所学校的人)。

数据的结构使得每一行都是一位老师;每所学校都有多个列,按年份索引(例如,2012 年学校 1、2012 年学校 2、2016 年学校 1、2016 年学校 2 等列)。

您可以使用几种方法来比较多个变量 - 主要是 ANY 函数、循环命令(LOOPDO REPEAT)和重组命令。

以下是两个示例,使用名为 Yr1School1、Yr1School2 .... Yr5School1、Yr5School2 .... 的学校 ID。您当然可以使用自己的变量名称来代替,只需确保它们以相同的方式排序 -如果不是,则必须在命令中列出所有名称,而不是像 Yr1School1 TO Yr1School6.

中那样使用 "TO"

这个例子结合了一个循环和一个任意函数:

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 的留级学校数。