我希望你们中的一个聪明的人能够帮助我克服我遇到滞后功能的障碍。我有一个具有以下结构的数据集:
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人员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
感谢大家寻求帮助,你可以提供:)
答案 0 :(得分:2)
我认为有两种方法可以做到这一点。第一个使用RETAIN函数和BY组而不是滞后的数据步骤。 到目前为止最简单的方法是转置然后丢弃任何无关的变量。
方法1:
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;
方法2:
proc transpose data=have out=want2(drop=N4) prefix=N;
by year caseid personid;
var X;
run;