|
板凳

楼主 |
发表于 2011-6-24 17:56:36
|
只看该作者
Re: 如何实现这种lag
[code:2qdascri]data raw;
input ret date:yymmdd8.;
rowid=_n_;
format date yymmdd10.;
datalines;
0.001 20040307
0.014 20040308
. 20040309
. 20040312
. 20040509
0.013 20040511
0.008 20040601
;
data out(keep=rowid ret date);
if _n_=1 then do;
declare hash h(hashexp:8);
rc=h.defineKey('id');
rc=h.defineData('lrowid','trowid','lret','tret');
rc=h.defineDone();
call missing(id,lrowid,trowid,lret,tret);
declare hiter iter('h');
end;
set raw(where=(not missing(ret)) in=hash) raw;
if hash then do;
if _n_ gt 1 then h.add(key:_n_,data:lag(rowid),data:rowid,data:lag(ret),data:ret);
end;
else do;
rc=iter.first();
if missing(ret) then
do until(iter.next() ne 0);
if lrowid<rowid<trowid then do;
ret=ifn(rowid-lrowid le trowid-rowid,lret,tret);
leave;
end;
end;
output;
end;
run;[/code:2qdascri] |
|