【问题标题】:Baseline mean by subject visits (SAS)主题访问的基线平均值 (SAS)
【发布时间】:2020-04-04 22:53:08
【问题描述】:

我正在尝试计算特定访问的基线平均值。例如,如果受试者没有指定的访问,则将重新计算基线平均值,忽略受试者。

这是数据:

Subject            Visit              Value
001                Baseline           10
001                Visit 2            11
001                Visit 3            12
001                Visit 4            13
002                Baseline           11
002                Visit 2            12
002                Visit 4            13
002                Visit 5            14
003                Baseline           12
003                Visit 3            13
003                Visit 4            14
003                Visit 5            15

我想获得以下内容:

Visit             BaselineMean       VisitMean
Baseline          11                 11
Visit 2           10.5               11.5
Visit 3           11                 12.5
Visit 4           11                 13.3
Visit 5           11.5               14.5

这是我每次访问的平均值的表格:

proc sql;
create table want as
select 
    visit, 
    mean(value) as meanValue
from have
group by visit;

任何见解将不胜感激。

【问题讨论】:

    标签: sql sas summary


    【解决方案1】:

    考虑两个聚合的连接,其中一个使用自身的自连接:

    proc sql;
       CREATE TABLE want as 
       SELECT bagg.Visit, bagg.BaselineMean, vagg.VisitMean
       FROM 
         (SELECT t2.Visit, MEAN(t1.Value) AS BaselineMean
          FROM have t1
          INNER JOIN have t2
             ON t1.Subject = t2.Subject 
            AND t1.Visit = 'Baseline'
          GROUP BY t2.Visit) bagg
    
       INNER JOIN
         (SELECT Visit, MEAN(Value) AS VisitMean
          FROM have 
          GROUP BY Visit) vagg
       ON bagg.Visit = vagg.Visit;
    quit;
    

    SQL Demo

    【讨论】:

      【解决方案2】:

      首先创建一个表格,为每个主题设置基线值,如下所示:

      proc sql;
      create table baseline as 
          select distinct subject, value
              from t1
          where visit = 'Baseline'
      ;
      

      然后用基线值扩充主表。请注意,如果受试者没有基线记录,则使用合并:

      proc sql;
          create table inter as 
              select t1.*m, coalesce(b.value, 0) as b_val 
                  from t1 left join baseline b  
                      on t1.subject = b.subject
      ;
      quit;
      

      最后计算基线和访问的平均值如下:

        proc sql;
              select visit, mean(b_val) as BaselineMean, mean(value) as visitMean
                  from inter 
          group by visit
      ;
      quit;
      

      【讨论】:

        【解决方案3】:

        您可以计算子选择的聚合统计信息,该子选择本身使用相关子查询来选择主题基线值。

        proc sql;
          create table want as
          select 
            visit
          , mean(baseline) as baselinemean format=5.1
          , mean(value) as visitmean       format=5.1
          from 
            ( select 
                visit
              , value
              , ( select value 
                  from have as inner 
                  where inner.subject = outer.subject 
                    and inner.visit='Baseline'
                ) as baseline
              from have as outer
            )
          group by visit
          ;
        quit;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多