Если вы группируете с квартилями, избегайте жесткого кодирования и используйте PROC RANK с GROUPS = 4.Группы будут от 0 до 3, но идея та же.
proc rank data=sta310.gbcshort out=sta310.hw4 groups=4;
var age;
rank age_cat;
run;
В вашей текущей программе эта строка / логика является вашей проблемой:
if age > 41.950498302 and le 49.764538386 then age_cat=2;
Это должно быть:
if 41.950498302 < age <= 49.764538386 then age_cat=2;
Вы также должны переключить их наIF / ELSE IF, а не IF заявления.Вы должны сделать это, потому что как только он находит категорию, он перестает оценивать условия, поэтому он не проверяет каждое условие IF, что делает его немного быстрее.Это не то, что вы заметите в своей домашней работе, но если вы когда-либо работаете с большими наборами данных, это действительно важно знать.
if age <= 41.950498302 then age_cat = 1;
else if 41.950498302 < age <= 49.764538386 then age_cat=2;
else if 49.764538386 < age <= 56.696966378 then age_cat=3;
else if 56.696966378 < age then age_cat=4;