我是分步实现的,不知道是否合你意。
逐年每个名字出现的年数:
- proc sort data=test out=a1 nodupkey;
- by name year;
- run;
- data a1;
- set a1;
- by name year;
- if first.name then nianshu=0;
- nianshu+1;
- run;
- proc print data=a1;
- run;
复制代码结果:
Obs num year name nianshu
1 1 2005 LH 1
2 6 2006 LM 1
3 2 2005 ZR 1
4 4 2006 ZR 2
截止该年份累计出现的次数:
- proc sql;
- select a.name,a.year,count(*) from
- (select name,year,count(*) from test group by name,year) as a
- inner join
- test b on a.name=b.name and a.year>=b.year group by a.name,a.year;
复制代码结果:
name year zongji
----------------------------
LH 2005 2
LM 2006 1
ZR 2005 1
ZR 2006 3
这样得到的结果,条数和之前的不一样,要想跟之前的一样,可以再merge回去。