Набор данных 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 как студенты
  группа по старшей школе
  заказ по старшей школе;
уволиться;
Другие вопросы по тегам