首页 > 解决方案 > 使用 SAS 逻辑计算 BMI

问题描述

对于许多患者,我有一个如下所示的数据集

Patient   VisitDate   Value   Unit   Type 
 A        Jan12019     1      m      Height
 A        Jan12019     50     kg     Weight
 A        Jan52019     2      m      Height
 A        Jan52019     55     kg     Weight

我正在尝试添加 BMI 以获取这些患者的以下数据集:

Patient   VisitDate   Value      Unit   Type 
 A        Jan12019     1         m      Height
 A        Jan12019     50        kg     Weight
 A        Jan52019     2         m      Height
 A        Jan52019     55        kg     Weight
 A        Jan52019     50/1^2    kg/m2  BMI
 A        Jan52019     55/2^2    kg/m2  BMI

我不太关心实际代码,但我试图理解在 SAS 中编程之外的逻辑。以下是我到目前为止在伪代码中的内容:

创建 BMI 数据集。对于每个访问日期的每位患者,值 = 体重/身高^2。类型 = BMI。单位 = 公斤/平方米。保留患者、就诊日期信息。

标签: sas

解决方案


根据逻辑,您试图从同一日期的两行体重和身高的患者中计算出 BMI。

因此,一种方法是使用 proc sql,您可以在其中根据相同的患者姓名和访问日期将主表与自身连接起来。

其次,您还可以根据“类型”或“单元”将主数据集分成两部分,然后进行合并。您要实现哪种逻辑取决于您。我的方法如下所示:

 proc sql;
  create table BMI
  as
  select a.Patient, 
        a.VisitDate,
        b.value/(a.value*a.value) as value,
        "kg/m2" as Unit,
        "BMI" as Type
   from have a
   inner join have b
          on a.patient=b.Patient
          and a.visitdate=b.visitdate
          and a.Type="Height"
          and b.Type="Weight";
  quit;

推荐阅读