使用 LAG 函数合并 SAS 数据集
Consolidating SAS dataset with LAG function
我希望你们中的一位聪明人能够帮助克服我在延迟功能方面遇到的障碍。我有一个具有以下结构的数据集:
Year CaseID PersonID X
2003 1 1 3
2003 1 1 4
2003 2 1 1
2003 2 2 2
2003 2 2 1
2003 3 1 3
2003 3 1 1
2003 3 1 4
2003 3 1 5
2003 3 2 1
我希望做的是将每个 CaseID 中每个 PersonID 的所有 X 值合并 3 次。例如,Case 3 Person 1 有四个条目,但我只需要将前三个 X 值合并到一行中。我将继续研究滞后函数,但再次希望有人能够帮助我进行一些指导,以便获得以下结果。
Year CaseID PersonID N1 N2 N3
2003 1 1 3 4
2003 2 1 1
2003 2 2 2 1
2003 3 1 3 1 4
2003 3 2 1
感谢大家的关注和可能提供的帮助:)
我认为有两种方法可以做到这一点。第一个使用带有 RETAIN 函数和 BY 组的数据步骤而不是滞后。
到目前为止最简单的方法是转置然后删除任何无关的变量。
方法一:
data want;
set have;
by year caseid personid;
retain count N1-N3 ;
array N(3) N1-N3;
if first.personID then do;
count=1;
call missing(N1, N2, N3);
end;
else count+1;
if count<=3 then N(count)=x;
if last.personID then output;
drop count x;
run;
方法二:
proc transpose data=have out=want2(drop=N4) prefix=N;
by year caseid personid;
var X;
run;
我希望你们中的一位聪明人能够帮助克服我在延迟功能方面遇到的障碍。我有一个具有以下结构的数据集:
Year CaseID PersonID X
2003 1 1 3
2003 1 1 4
2003 2 1 1
2003 2 2 2
2003 2 2 1
2003 3 1 3
2003 3 1 1
2003 3 1 4
2003 3 1 5
2003 3 2 1
我希望做的是将每个 CaseID 中每个 PersonID 的所有 X 值合并 3 次。例如,Case 3 Person 1 有四个条目,但我只需要将前三个 X 值合并到一行中。我将继续研究滞后函数,但再次希望有人能够帮助我进行一些指导,以便获得以下结果。
Year CaseID PersonID N1 N2 N3
2003 1 1 3 4
2003 2 1 1
2003 2 2 2 1
2003 3 1 3 1 4
2003 3 2 1
感谢大家的关注和可能提供的帮助:)
我认为有两种方法可以做到这一点。第一个使用带有 RETAIN 函数和 BY 组的数据步骤而不是滞后。 到目前为止最简单的方法是转置然后删除任何无关的变量。
方法一:
data want;
set have;
by year caseid personid;
retain count N1-N3 ;
array N(3) N1-N3;
if first.personID then do;
count=1;
call missing(N1, N2, N3);
end;
else count+1;
if count<=3 then N(count)=x;
if last.personID then output;
drop count x;
run;
方法二:
proc transpose data=have out=want2(drop=N4) prefix=N;
by year caseid personid;
var X;
run;