如何找到SAS中分组数据中第一个观察值的滞后

how to find the lag of the first observation in a grouped data in SAS

我有一个数据集,它看起来像这样:

id name    score

1  daniel  30
1  jane    20
1  keisha  70
2  kelly   30
2  jerry   60
2  jay     40

我想找出分数之间的差异,将每组的第一个分数与该组中的所有其他分数进行比较。例如,

我想将 jane 的分数与 daniel 的 (30-20=10) 进行比较,并将 keisha 的分数与 daniel 的 (abs(30-70) = 40) 进行比较

并通过比较杰里的分数与凯莉的分数 (abs(30-60=30)) 以及杰伊的分数与凯莉的分数 (40-30 = 10) 来重新开始。

id 姓名分数比较

1  daniel  30    .
1  jane    20    10
1  keisha  70    40
2  kelly   30    .
2  jerry   60    30
2  jay     40    10

有人知道用 SAS 写这个的方法吗?或任何 SQL 命令?

我试过以下方法

data scoring_prep;
  set scoring_prep;
  by id;
  if not missing(score) then do;
    scorediff = abs(dif(score));
    if id ne lag(id) then scorediff = .;
  end;
run;

但这只查找提供了先前记录的滞后,因此例如,keisha 将与 jane 而不是 daniel 进行比较。

由于您不与之前的值进行比较,因此您不想使用 LAG()DIF() 函数。而是使用保留变量来向前传递比较值。

data want;
  set scoring_prep;
  by id;
  retain baseline;
  if first.id then baseline=score;
  else scorediff=abs(baseline - score);
run;