我有以下数据。我想写一个sas proc sql代码来获取每个患者的最后一个非缺失值(ptno)。
data sda;
input ptno visit weight;
format ptno z3. ;
cards;
1 1 122
1 2 123
1 3 .
1 4 .
2 1 156
2 2 .
2 3 70
2 4 .
3 1 60
3 2 .
3 3 112
3 4 .
;
run;
proc sql noprint;
create table new as
select ptno,visit,weight,
case
when weight = . then weight
else .
end as _weight_1
from sda
group by ptno,visit
order by ptno,visit;
quit;
上面的sql代码不能正常工作。
欲望输出数据如下:
ptno visit weight
1 1 122
1 2 123
1 3 123
1 4 123
2 1 156
2 2 .
2 3 70
2 4 70
3 1 60
3 2 .
3 3 112
3 4 112
答案 0 :(得分:1)
由于你确实有一个行号(访问),你可以这样做 - 虽然它 比数据步骤慢。
在这里,它被分成一个单独的列用于演示目的 - 当然,在您的情况下,您需要将其合并为一列。
基本上,您需要一个子查询来确定最大访问次数小于当前具有合法重量计数的次数,然后将其连接到表中以获得权重。
proc sql;
select ptno, visit, weight,
(
select weight
from sda A,
(select ptno, max(visit) as visit
from sda D
where D.ptno=S.ptno
and D.visit<S.visit
and D.weight is not null
group by ptno
) V
where A.visit=V.visit and A.ptno=V.ptno
)
from sda S
;
quit;
答案 1 :(得分:1)