在aisdat数据框中创建一个新变量(BMICAT),使用计算的BMI对每个indiv进行适当的分类。为前5行数据打印性别,体育,BMI和BMICAT。
我无法打印BMICAT。任何帮助将不胜感激。
data aisdat;
input Sex $ Sport $ Htm2 Wt;
BMI=Wt/Htm2;
if (BMI < 18.5) then BMICAT='Underweight';
else if (BMI > 18.5) and (BMI < 24.99) then BMICAT='Normal';
else if (BMI > 24.99) and (BMI < 29.99) then BMICAT='Overweight';
else if (BMI >= 29.99) then BMICAT='Obese';
datalines;
F BBall 3.837681 78.9
F BBall 3.598609 74.4
F BBall 3.161284 69.1
F BBall 3.4225 74.9
F BBall 3.407716 64.6
F BBall 3.0276 63.7
F BBall 3.467044 75.2
F BBall 3.020644 62.3
F BBall 2.937796 66.5
F BBall 3.236401 62.9
;
PROC PRINT data=aisdat (obs=5);
var BMI BMICAT;
RUN;
QUIT;
答案 0 :(得分:0)
对于遇到同样困难的人,我找到了答案:
删除var名称。
答案 1 :(得分:0)
我让它发挥作用。我没有任何问题让BMICAT使用您的代码打印而不做任何更改。我确实将你的不等式语句改为包含所有值。见下文。此外,虽然不是严格需要,但数据步骤之后的运行语句是一种很好的做法。既然你的问题说要打印所有其他变量,我也修改了它。
最后,@Haikuo Bian有一个好点。 Sas将根据它分配的第一个值的长度来定义BMICAT长度。由于体重不足是11个字符并且是最长的,我已经包含了一个信息声明,以防止将来的焦虑被截断到BMICAT。
data aisdat;
input Sex $ Sport $ Htm2 Wt;
informat BMICAT $11.;
BMI=Wt/Htm2;
if (BMI < 18.5) then BMICAT='Underweight';
else if (BMI >= 18.5) and (BMI < 25) then BMICAT='Normal';
else if (BMI >= 25) and (BMI < 30) then BMICAT='Overweight';
else if (BMI >= 30) then BMICAT='Obese';
datalines;
F BBall 3.837681 78.9
F BBall 3.598609 74.4
F BBall 3.161284 69.1
F BBall 3.4225 74.9
F BBall 3.407716 64.6
F BBall 3.0276 63.7
F BBall 3.467044 75.2
F BBall 3.020644 62.3
F BBall 2.937796 66.5
F BBall 3.236401 62.9
;
RUN;*GOOD PRACTICE*;
PROC PRINT data=aisdat (obs=5);
var sex sport bmi bmicat;
RUN;
QUIT;
此输出:
Obs Sex Sport BMI BMICAT
1 F BBall 20.5593 Normal
2 F BBall 20.6747 Normal
3 F BBall 21.8582 Normal
4 F BBall 21.8846 Normal
5 F BBall 18.9570 Normal