假设数据集date如下:
code date standard resdate
red 20040102 20040106
red 20040105 20040106
red 20040106 20040106
red 20040107 20040106
green 20050315 20050318
green 20050318 20050318
green 20050319 20050318
green 20050320 20050318
yellow 20060416 20060420
yellow 20060418 20060420
yellow 20060419 20060420
yellow 20060420 20060420
yellow 20060421 20060420
求: 以code分组,分为三组,每组中以date=standerd的观测为基准,它的resdate的值为0,然后向上的观测resdate值依次减1,向下的观测resdate值依次加1。例如上面的数据集经过这样的处理后应为:
code date standard resdate
red 20040102 20040106 -2
red 20040105 20040106 -1
red 20040106 20040106 0
red 20040107 20040106 1
green 20050315 20050318 -1
green 20050318 20050318 0
green 20050319 20050318 1
green 20050320 20050318 2
yellow 20060416 20060420 -3
yellow 20060418 20060420 -2
yellow 20060419 20060420 -1
yellow 20060420 20060420 0
yellow 20060421 20060420 1
-我的苯办法,仅供参考……
-------
data test;
input code $ date $ standard $;
cards;
red 20040102 20040106
red 20040105 20040106
red 20040106 20040106
red 20040107 20040106
green 20050315 20050318
green 20050318 20050318
green 20050319 20050318
green 20050320 20050318
yellow 20060416 20060420
yellow 20060418 20060420
yellow 20060419 20060420
yellow 20060420 20060420
yellow 20060421 20060420
;
data test;
set test;
n1=_n_;
if date=standard then n2=_n_;
else n2=0;
run;
proc sql noprint;
create table test(drop=n1 n2) as select *, n1-max(n2) as resdate
from test
group by code;
quit;