2015-10-19 297 views
1

在aisdat數據框中創建一個新變量(BMICAT),使用計算的BMI對每個個體進行相應的分類。打印前5行數據的性別,體育,BMI和BMICAT。SAS中的變量分類

我無法打印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

這可能是題外話,但我不能不指出:1。您的值分配差距。不包括準確的18.5和24.99的值。 2.你很幸運,「低體重」是你的第一項任務。交換'正常'或'肥胖'的第一個任務,看看會發生什麼。總是使用Length語句而不是使用值本身來定義長度是一種很好的做法。 –

回答

0

對於那些遇到同樣的困難,我已經找到了答案:

刪除變種的名稱。

+1

VAR指定要打印的變量。你的輸出應該只包含這兩個變量。不指定VAR語句意味着所有打印默認。 – Reeza

0

我讓它工作。我沒有任何問題讓BMICAT使用您的代碼進行打印而沒有任何更改。我確實改變了你的不平等言論,以包容所有的價值。見下文。此外,雖然不是嚴格需要,但Data步驟之後的運行語句是很好的做法。既然你的問題說打印所有其他變量,我也修改它。

最後,@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