如何找到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;
我有一个数据集,它看起来像这样:
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;