Набор данных SAS: подсчет наблюдений, соответствующих условию IF
Вот очень простой вопрос, но я не могу найти простой способ сделать это. У меня есть набор данных, который ссылается на разные школы и студентов:
Highschool Students Sexe
A 1 m
A 2 m
A 3 m
A 4 f
A 5 f
B 1 m
B 2 m
И я хотел бы создать две новые переменные, которые подсчитывают количество мужчин и женщин в каждой школе:
Highschool Students Sexe Nb_m Nb_f
A 1 m 1 0
A 2 m 2 0
A 3 m 3 0
A 4 f 3 1
A 5 f 3 2
B 1 m 1 0
B 2 m 2 0
И, наконец, я могу извлечь последнюю строку с итогом, который будет выглядеть так:
Highschool Students Sexe Nb_m Nb_f
A 5 f 3 2
B 2 m 2 0
Есть идеи?
2 ответа
Сначала вы должны отсортировать набор данных по Highschool:
proc sort data = your_dataset;
by Highschool;
run;
тогда вы используете
- - сохранить, чтобы не сбрасывать Nb_m и Nb_f при каждой записи;
- - последняя функция и оператор вывода для печати только последнего наблюдения для каждой школы.
data new_dataset;
set your_dataset;
by Highschool;
retain Nb_m Nb_f;
if Sexe = 'm' then
Nb_m + 1;
else
Nb_f + 1;
if last.Highschool then do;
Students = Nb_m + Nb_f;
output;
Nb_m = 0;
Nb_f = 0;
end;
run;
Вы можете сделать это в одном PROC SQL
шаг...
Кроме того, я не думаю, что вам действительно нужно значение Sexe
из последнего ряда.
proc sql; создать таблицу хочу как выберите Highschool, сумма (случай, когда Sexe = 'f', то 1 или 0 конец) как Nb_f, сумма (случай, когда Sexe = 'm', то 1 или 0 конец) как Nb_m, Nb_f + Nb_m как студенты группа по старшей школе заказ по старшей школе; уволиться;