SAS-群体个体观察

SAS-群体个体观察,sas,Sas,很抱歉,我对SAS的许多功能还不熟悉-我只使用了几个月,主要用于调查数据分析,但现在我正在使用一个数据集,其中包含用于交叉研究的个人级别数据。它的形式是:ID治疗期测量1测量2 我想做的是能够将这些个体按他们的治疗组分组,然后输出一个变量,该变量具有测量值1和测量值2的组平均值,以及另一个变量,该变量具有每组的观察计数 即 我想要的是表格中的数据: group a = where trt=1 & per=1 group b = where trt=2 & per=2 group

很抱歉,我对SAS的许多功能还不熟悉-我只使用了几个月,主要用于调查数据分析,但现在我正在使用一个数据集,其中包含用于交叉研究的个人级别数据。它的形式是:ID治疗期测量1测量2

我想做的是能够将这些个体按他们的治疗组分组,然后输出一个变量,该变量具有测量值1和测量值2的组平均值,以及另一个变量,该变量具有每组的观察计数

我想要的是表格中的数据:

group a = where trt=1 & per=1
group b = where trt=2 & per=2
group c = where trt=2 & per=1
group d = where trt=1 & per=2

trtgrp avg_m1 avg_m2 n
  A      102   76    2
  B      ...    ...  ...
  C
  D
感谢您的帮助。

/p>/创建示例数据集/

/使用
proc summary
汇总
trt
per
/

  • 要汇总的变量(维度)将进入
  • 您希望获得平均值的变量(度量值)将进入
    var
  • 由于您希望生成
    平均值
    ,因此您必须编写
    平均值
    作为所需的统计数据
  • 请在此处阅读有关proc摘要的更多信息

    这里呢


    /创建示例数据集/

    /使用
    proc summary
    汇总
    trt
    per
    /

  • 要汇总的变量(维度)将进入
  • 您希望获得平均值的变量(度量值)将进入
    var
  • 由于您希望生成
    平均值
    ,因此您必须编写
    平均值
    作为所需的统计数据
  • 请在此处阅读有关proc摘要的更多信息

    这里呢



    另一种方法使用
    PROC-SQL
    ,优点是它使用了简单的英语语法,因此问题中的组概念在语法中得到了维护:

    PROC SQL;
      CREATE TABLE final AS
      SELECT 
      trt,
      per,
      avg(m1) AS avg_m1,
      avg(m2) AS avg_m2,
      count(*) AS n
      FROM
      test
      GROUP BY trt, per;
    QUIT;
    
    您甚至可以像您在问题中所做的那样,通过应用条件
    CASE
    逻辑来添加自己的组标题:

    PROC SQL;
      CREATE TABLE final AS
      SELECT 
      CASE 
        WHEN trt=1 AND per=1 THEN 'A'
        WHEN trt=2 AND per=2 THEN 'B'
        WHEN trt=2 AND per=1 THEN 'C'
        WHEN trt=1 AND per=2 THEN 'D'
      END AS group
      avg(m1) AS avg_m1,
      avg(m2) AS avg_m2,
      count(*) AS n
      FROM
      test
      GROUP BY group;
    QUIT;
    
    COUNT(*)
    只计算组中找到的行数。AVG函数计算给定列的平均值

    在每个示例中,您都可以将
    GROUP BY
    子句中显式命名的列替换为表示
    SELECT
    子句中列位置的数字

    GROUP BY 1,2
    

    但是,请注意此方法,因为稍后向
    SELECT
    子句添加列可能会导致问题。

    替代方法使用
    PROC-SQL
    ,其优点是它使用纯英语语法,因此问题中的组概念在语法中保持不变:

    PROC SQL;
      CREATE TABLE final AS
      SELECT 
      trt,
      per,
      avg(m1) AS avg_m1,
      avg(m2) AS avg_m2,
      count(*) AS n
      FROM
      test
      GROUP BY trt, per;
    QUIT;
    
    您甚至可以像您在问题中所做的那样,通过应用条件
    CASE
    逻辑来添加自己的组标题:

    PROC SQL;
      CREATE TABLE final AS
      SELECT 
      CASE 
        WHEN trt=1 AND per=1 THEN 'A'
        WHEN trt=2 AND per=2 THEN 'B'
        WHEN trt=2 AND per=1 THEN 'C'
        WHEN trt=1 AND per=2 THEN 'D'
      END AS group
      avg(m1) AS avg_m1,
      avg(m2) AS avg_m2,
      count(*) AS n
      FROM
      test
      GROUP BY group;
    QUIT;
    
    COUNT(*)
    只计算组中找到的行数。AVG函数计算给定列的平均值

    在每个示例中,您都可以将
    GROUP BY
    子句中显式命名的列替换为表示
    SELECT
    子句中列位置的数字

    GROUP BY 1,2
    

    但是,请注意此方法,因为稍后向
    SELECT
    子句添加列可能会导致问题。

    非常感谢大家的帮助!这两种方法都有效,但我喜欢procsql方法的简单性。干杯。非常感谢你们的帮助!这两种方法都有效,但我喜欢procsql方法的简单性。干杯