一个简单的问题,我有以下数据: 交易代码_日期_ Fem分析师(如果为true,则为虚拟1)___该月的变量(例如beta) AA _ 2001年 1月4日_ 1 ___ 0.61 AA _ 2001年5月4日_ 1 ___ 0.62 AA _ 2001年4月4日_ 1 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我有一个有关成绩的SAS数据集。 以下是一个子集:
Name: Grade: Subject:
Bob 8 English
Bob 6 Maths
Bill 7 English
Joe 9 Maths
有没有办法可以找到每人的平均成绩? 用另一种语言,我知道我会按名称分组,最后得到
Name: Grade:
Bob 14
Bill 7
Joe 9
然后找到平均值,即总和(等级)/ len(等级),以获得每人的平均等级,即(30/3 = 10)。
请注意,在此示例中,我的某些观察多次出现,例如“鲍勃”,这就是为什么需要“分组依据”方法的原因。
有没有办法在sas中做到这一点?
数据步骤中这样的事情
/*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;
我为您展示了标准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 |
+---------+-----+--------+-------+---+--------------+
您可以通过SAS中的SQL直接执行此操作。
proc sql noprint;
create table Avg_Grades as
select Name, mean(grade) as Avg_Grade
from have
group by Name
;
quit;
此处最好的方法是使用汇总过程,尤其是如果您需要统计数据而不是均值。 请注意,如果您使用CLASS语句,则不必对数据进行预排序。
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.