SAS:计算前几年的唯一值(保持计数)
SAS: Counting Unique Values for Previous Years (keeping count)
我想知道记录往年观察结果的最有效方法:
我有这样的数据:
id store year count
1 green 2011 3
2 green 2011 3
3 green 2011 3
4 green 2012 1
5 blue 2012 1
6 blue 2013 1
7 red 2011 1
8 red 2012 1
9 red 2013 1
基本上,我计算了 id 的频率并按商店和年份对它们进行分组,以跟踪当年在商店购物的观察次数。
现在,我想做的是计算前一年的观察结果。
期望的输出:
> id store year count Count_Previous_Years
>
> 1 green 2011 3 0
>
> 2 green 2011 3 0
>
> 3 green 2011 3 0
>
> 4 green 2012 1 3
>
> 5 blue 2012 1 0
>
> 6 blue 2013 1 1
>
> 7 red 2011 1 0
>
> 8 red 2012 1 1
>
> 9 red 2013 1 2
在 SQL 中有没有办法做到这一点?即用 "where" 语句计算前一年的 (id)?
这可以在数据步骤中完成,如下所示:
proc sort data=a;
by store year;run;
data b;
set a;
by store year;
retain hold_year count2 previous;
if first.store then do;
hold_year = year;
previous = 0;
count2 = 0;
end;
if year > hold_year then do;
previous = count2;
hold_year = year;
end;
count2=count2+1;
run;
我想知道记录往年观察结果的最有效方法:
我有这样的数据:
id store year count
1 green 2011 3
2 green 2011 3
3 green 2011 3
4 green 2012 1
5 blue 2012 1
6 blue 2013 1
7 red 2011 1
8 red 2012 1
9 red 2013 1
基本上,我计算了 id 的频率并按商店和年份对它们进行分组,以跟踪当年在商店购物的观察次数。
现在,我想做的是计算前一年的观察结果。
期望的输出:
> id store year count Count_Previous_Years
>
> 1 green 2011 3 0
>
> 2 green 2011 3 0
>
> 3 green 2011 3 0
>
> 4 green 2012 1 3
>
> 5 blue 2012 1 0
>
> 6 blue 2013 1 1
>
> 7 red 2011 1 0
>
> 8 red 2012 1 1
>
> 9 red 2013 1 2
在 SQL 中有没有办法做到这一点?即用 "where" 语句计算前一年的 (id)?
这可以在数据步骤中完成,如下所示:
proc sort data=a;
by store year;run;
data b;
set a;
by store year;
retain hold_year count2 previous;
if first.store then do;
hold_year = year;
previous = 0;
count2 = 0;
end;
if year > hold_year then do;
previous = count2;
hold_year = year;
end;
count2=count2+1;
run;