我有一些个人健康数据,我需要从一组四个个人读数中计算平均血压读数。但是,必须遵循一些条件规则来计算平均值。我正在使用四个收缩压读数 (s1, s2, s3
和s4
)。规则如下:
- 如果
s4
缺失,则血压读数为 (s1+s2)/2 - 如果
s4
没有缺失且 s2 、 s3 和 s4 等距,则平均 s2、s3 和 s4 的最大两个值。 - 如果
s4
没有缺失并且 s2、s3 和 s4不等距,则对最接近的两个值进行平均。
我考虑过使用数组和 proc 转置,但想知道是否有更优雅的方法来解决这个问题。
样本数据如下:
data bp;
input id s1 s2 s3 s4;
cards;
001 140 147 145 143
002 136 135 126 130
004 168 152 156 .
005 137 138 137 .
006 156 154 155 .
007 138 146 134 138
012 127 133 135 .
013 112 112 100 88
017 127 122 126 .
019 137 138 150 135
020 109 118 113 116
021 112 112 109 107
022 119 136 129 130
026 119 108 116 118
027 126 120 130 123
028 143 143 135 139
029 144 143 117 137
030 116 114 108 110
032 135 146 139 134
041 128 128 132 .
run;
data bp_2; set bp_1;
s_dif2 = abs(s3-s2) ;
s_dif3 = abs(s4-s3) ;
run;
第一个条件很容易编码,但我在 SAS 中跨变量选择值时遇到了麻烦。
任何帮助是极大的赞赏。