Sql 受试者就诊的基线平均值(SAS)

Sql 受试者就诊的基线平均值(SAS),sql,sas,summary,Sql,Sas,Summary,我试图计算特定就诊时的基线平均值。例如,如果受试者没有指定的就诊,将重新计算基线平均值,忽略受试者 以下是数据: Subject Visit Value 001 Baseline 10 001 Visit 2 11 001 Visit 3 12 001 Visit 4

我试图计算特定就诊时的基线平均值。例如,如果受试者没有指定的就诊,将重新计算基线平均值,忽略受试者

以下是数据:

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;

如有任何见解,将不胜感激

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

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;

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

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;

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

proc sql;
create table baseline as 
    select distinct subject, value
        from t1
    where visit = 'Baseline'
;
  proc sql;
        select visit, mean(b_val) as BaselineMean, mean(value) as visitMean
            from inter 
    group by visit
;
quit;
然后用基线值扩充主表。注意,如果受试者没有基线记录,则使用合并:

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;
create table baseline as 
    select distinct subject, value
        from t1
    where visit = 'Baseline'
;
  proc sql;
        select visit, mean(b_val) as BaselineMean, mean(value) as visitMean
            from inter 
    group by visit
;
quit;

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

proc sql;
create table baseline as 
    select distinct subject, value
        from t1
    where visit = 'Baseline'
;
  proc sql;
        select visit, mean(b_val) as BaselineMean, mean(value) as visitMean
            from inter 
    group by visit
;
quit;
然后用基线值扩充主表。注意,如果受试者没有基线记录,则使用合并:

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;
create table baseline as 
    select distinct subject, value
        from t1
    where visit = 'Baseline'
;
  proc sql;
        select visit, mean(b_val) as BaselineMean, mean(value) as visitMean
            from inter 
    group by visit
;
quit;

您可以计算子选择上的聚合统计信息,该子选择本身使用选择受试者基线值的相关子查询

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;

您可以计算子选择上的聚合统计信息,该子选择本身使用选择受试者基线值的相关子查询

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;