【问题标题】:How to do a last observation carrying forward using SAS PROC SQL如何使用 SAS PROC SQL 进行最后一次观察结转
【发布时间】:2015-12-14 14:48:24
【问题描述】:

我有以下数据。我想编写一个 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

【问题讨论】:

  • 这在使用retain 的数据步骤中比在本机proc sql 中更容易。
  • 创建locf,因为这是我们遇到的一大堆问题。如果有人愿意,请随时创建标签 wiki - 否则我会在有时间的时候创建。
  • @joe,非常感谢!

标签: sql sas locf


【解决方案1】:

虽然你没有这样描述它,但你并没有继承 VISIT 1 对吗?

我不知道您为什么要使用 SQL 来执行此操作。在 SAS 中,数据步骤更适合该任务。我喜欢使用“更新技巧”。如果您对它的工作原理感兴趣,我将留给您研究 UPDATE 语句。

data locf;
   update sda(obs=0 keep=ptno) sda;
   by ptno;
   output;
   if visit eq 1 then call missing(weight);
   run;

【讨论】:

    【解决方案2】:

    由于您确实有一个行号(访问),您可以这样做 - 尽管它比数据步骤慢很多

    在这里,为了演示目的,它被分成一个单独的列 - 当然,在你的情况下,你会想要将它合并到一个列中。

    基本上,您需要一个子查询来确定最大访问次数小于当前具有合法权重计数的访问次数,然后将其连接到表中以获得权重。

    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;
    

    【讨论】:

      猜你喜欢
      • 2021-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多