#sas #format
#sas #формат
Вопрос:
Таким образом, этот код продолжает возвращать ошибки вокруг символов моих операторов if, когда я их удаляю, он выполняется до завершения, но отказывается печатать / распознавать мой код формата. Новичок в этом деле, собираюсь выбросить свой компьютер из окна, так что было бы здорово, если бы более наметанный глаз мог взглянуть.
Proc Format;
Value $Gender '1'='Male'
'2'='Female';
Value $STATUS '1'='Yes'
'0'='No';
run;
data Myocard;
Infile '/folders/myfolders/sasuser.v94/Data for Classes 3 to 6/MI.dat';
Input ID $1-3
Gender $4
BMI 5-8
Age 9-10
DM $11
HTN $12
MI $13
PACKYR 14-15;
Format Gender $SexFMT. HTN DM MI $STATUS.;
If BMI 18.0-25.0 ='Normal';
If BMI 25.1-30.0 ='Overweight';
If BMI > 30.0 ='Obese';
If PACKYR 0 code 0;
If PACKYR > 0 code 1;
run;
proc print data= myocard label;
Label ID ='Subject Identifier'
BMI ='Body Mass Index'
DM ='Diabetes Mellitus Status'
HTN ='Hypertension'
MI ='Myocardial Infarction'
PACKYR ='Packs Smoked Per Day Per Year';
Format Gender $SexFMT. HTN DM MI $STATUS.;
run;
Ответ №1:
Я не могу придумать ни одного языка, на котором работали бы закодированные вами утверждения.
If BMI 18.0-25.0 ='Normal';
If BMI 25.1-30.0 ='Overweight';
If BMI > 30.0 ='Obese';
If PACKYR 0 code 0;
If PACKYR > 0 code 1;
Похоже, вы сопоставляете значения в диапазоне с категориальным значением.
Вы можете использовать Proc FORMAT
для определения пользовательских форматов, которые используются в вашем Proc PRINT
Proc FORMAT;
value BMI
18 - 25 = 'Normal'
25 - 30 = 'Overweight'
30 - high = 'Obese'
;
value packyr_code
0 = '0'
0-high = '1'
;
Если вместо этого вам нужна новая переменная, рассмотрите SELECT
оператор и IF/THEN/ELSE
операторы.
data myocard;
...
select;
when (18 < bmi < 25) obesity_class = 'Normal';
when (25 <= bmi < 30) obesity_class = 'Overweight'
when (30 < bmi) obesity_class = 'Obese'
otherwise obesity_class = cats('bmi:',bmi);
end;
if packyr = 0 then code = 0;
else if packyr > 0 then code = 1;
else code = -1;
run;
Ответ №2:
Ваши операторы IF неверны с точки зрения синтаксиса.
- Новое значение не присваивается новой переменной
- Несколько операторов IF вместо IF/ELSE
- ЗНАЧИТ, пропал без ВЕСТИ
- Пропавший без вести =
Этот код:
If BMI 18.0-25.0 ='Normal';
If BMI 25.1-30.0 ='Overweight';
If BMI > 30.0 ='Obese';
Должно быть:
If 18.0<BMI<=25 then BMI_Category ='Normal';
else If 25.1<=BMI<=30.0 then BMI_Category ='Overweight';
else If BMI > 30.0 then BMI_Category='Obese';
If PACKYR = 0 then code_category = 0;
else PACKYR > 0 then code_category = 1;
Или использование ваших форматов с помощью оператора PUT
BMI_Category = put(BMI, BMI.);
Code_category = put(packyr, packyr_code.);