l****o 发帖数: 52 | 1 有一组数据
A 1 100
A 2 120
A 3 150
B 2 100
B 3 140
1,2,3 代表 年,A B代表人。100,是分数。问题是,建立一个新的variable'
Difference',,如果后一年比前一年的分数低,则是0,如果高则是1. 建立另两个
variable 'high', ‘avg' 记录,最高分和平均分。
想问问这个怎么来写。 Do function 吗? 谢谢! | A****1 发帖数: 33 | 2 data one;
input id $ age score;
cards;
A 1 100
A 2 120
A 3 150
B 2 100
B 3 140
;
run;
proc sort data=one;
by id;
run;
data two;
set one;
by id;
PrevYear=lag(score);
if first.id then PrevYear=0;
difference=ifc(PrevYear>score,'1','0');
run;
proc means data=two max mean;
by id;
var score;
output out=three(keep=id high avg) max=high mean=avg;
run;
data two;
merge two three;
by id;
run;
【在 l****o 的大作中提到】 : 有一组数据 : A 1 100 : A 2 120 : A 3 150 : B 2 100 : B 3 140 : 1,2,3 代表 年,A B代表人。100,是分数。问题是,建立一个新的variable' : Difference',,如果后一年比前一年的分数低,则是0,如果高则是1. 建立另两个 : variable 'high', ‘avg' 记录,最高分和平均分。 : 想问问这个怎么来写。 Do function 吗? 谢谢!
| l****u 发帖数: 529 | 3 proc sql;
create table two as
select a.*, case when a.score-b.score <0 then 0 else 1 end as flag,
max(a.score) as maxscore, avg(a.score) as avgscore
from one as a
left join
one as b
on a.id=b.id and a.year-b.year=1
group by a.id;
quit; |
|