Среднее ___ за отчетливое наблюдение в сас? - PullRequest
0 голосов
/ 12 октября 2018

У меня есть набор данных sas относительно оценок.Вот подмножество следующим образом:

 Name:     Grade:      Subject:   
Bob         8         English
Bob         6         Maths
Bill        7         English
Joe         9         Maths

Можно ли как-нибудь определить среднюю оценку на человека?На другом языке, я понимаю, я бы сгруппировал по Имени и в итоге набрал

 Name:     Grade:       
Bob         14                      
Bill        7         
Joe         9     

, а затем нашел бы среднюю, т.е. сумму (оценку) / лен (оценку), чтобы получить среднюю оценку на человека, т.е. (30 /3 = 10).

Обратите внимание, что некоторые из моих наблюдений часто встречаются в этом примере как «Боб», поэтому необходим подход «по группам».

Есть ли способ сделать это в SAS?

Ответы [ 4 ]

0 голосов
/ 12 октября 2018

Ваш лучший подход здесь - это использовать итоговую процедуру, особенно если вам нужна статистика, отличная от среднего.Обратите внимание, что если вы используете оператор CLASS, вам не нужно предварительно сортировать данные.

  1. В операторе PROC MEANS есть несколько опций:
    • NWAY - включает только самый высокий уровень, в противном случае SAS также добавит общую сумму
    • N /MEAN / NMISS / MEDIAN - статистика для подготовки
    • STACKODS изменяет формат вывода, обычно это форма, которую хочет большинство людей.
  2. CLASS -> переменная группировки
  3. VAR -> переменная для анализа
  4. ODS OUTPUT -> отправляет результаты в таблицу с именем WANT.

    proc means data=sashelp.class NWAY N MEAN NMISS MEDIAN STACKODS;
    CLASS sex; *this is your grouping variable(s), ie name;
    VAR height; *this is the variable(s) you want to summarize;
    ods output summary = want;
    run;
    
0 голосов
/ 12 октября 2018

Вы можете сделать это напрямую через SQL в SAS.

proc sql noprint;
    create table Avg_Grades as
        select Name, mean(grade) as Avg_Grade
        from have
        group by Name
        ;
quit;
0 голосов
/ 12 октября 2018

что-то вроде этого в шаге данных

/*sorting*/
proc sort data=have out=have1;
by name;
run;


  data want(drop=new_grade);
  do until(last.name);
  set have1(rename=(grade=new_grade));
  by name;
 grade = sum(new_grade, grade);
end;
run;

или в proc sql

proc sql;
create table want as 
select name, sum(grade) as grade
from have
group by name;
0 голосов
/ 12 октября 2018

Я покажу вам пример стандартного набора данных SAS.Вы должны предварительно отсортировать переменные по желаемой группе

proc sort data=sashelp.class out=class(keep=Sex Name Weight);
by sex;
run;

Затем добавьте некоторые сохраняемые переменные (сохраняйте значения в «следующих» строках) и условие с last или first выражениями

data res;
set class;
by sex;
retain sum 0 n 0;
sum+Weight;
n+1;

if last.sex then
    do;
        avg=sum/n;
        n=0;
        Sum=0;
    end;
run;

результат

+---------+-----+--------+-------+---+--------------+
|  Name   | Sex | Weight |  sum  | n |     avg      |
+---------+-----+--------+-------+---+--------------+
| Alice   | F   |     84 |    84 | 1 |            . |
| Barbara | F   |     98 |   182 | 2 |            . |
| Carol   | F   |  102.5 | 284.5 | 3 |            . |
| Jane    | F   |   84.5 |   369 | 4 |            . |
| Janet   | F   |  112.5 | 481.5 | 5 |            . |
| Joyce   | F   |   50.5 |   532 | 6 |            . |
| Judy    | F   |     90 |   622 | 7 |            . |
| Louise  | F   |     77 |   699 | 8 |            . |
| Mary    | F   |    112 |     0 | 0 | 90.111111111 |
| Alfred  | M   |  112.5 | 112.5 | 1 |            . |
| Henry   | M   |  102.5 |   215 | 2 |            . |
| James   | M   |     83 |   298 | 3 |            . |
| Jeffrey | M   |     84 |   382 | 4 |            . |
| John    | M   |   99.5 | 481.5 | 5 |            . |
| Philip  | M   |    150 | 631.5 | 6 |            . |
| Robert  | M   |    128 | 759.5 | 7 |            . |
| Ronald  | M   |    133 | 892.5 | 8 |            . |
| Thomas  | M   |     85 | 977.5 | 9 |            . |
| William | M   |    112 |     0 | 0 |       108.95 |
+---------+-----+--------+-------+---+--------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...