Если вы проверите свой журнал, вы найдете ошибку:
ERROR: Data set SASHELP.CLASS is not sorted in ascending sequence. The current BY group has Age = 16 and the next BY group has Age = 15.
При использовании обработки по группам данные должны быть отсортированы или проиндексированы с помощью переменной by
.
Поскольку данные обрабатываются, SAS ожидает, что они уже упорядочены или будут иметь индекс, содержащий порядок.
Первые три наблюдения оказываются уже в правильном порядке, возрастая с 15 до 16. Как только он добирается до 4-го наблюдения, он видит, что значение по группе равно 15. Затем произойдет ошибка, остановите обработку, и в случае PROC PRINT
выведите результаты, полученные до ошибки. Вы можете решить это, отсортировав sashelp.class
:
proc sort data=sashelp.class
out=class;
by age;
run;
proc print data = class;
var name sex age height weight;
where age > 14;
sum weight;
by age;
run;
Процедуры SAS обычно не сортируют автоматически по группам. Они должны быть отсортированы или проиндексированы перед использованием.