proc sort data=raw out=temp;
by company stock date;
run;
data temp2;
missing x;
retain company stock date_start share_start date share share_diff;
do _n_=1 by 1 until(last.stock);
set temp;
by company stock date;
if _n_=1 then do;
share_start=share;
date_start=date;
end;
end;
share_diff=share-share_start;
if share_diff=0 then do;
share_diff=-share_start;
share=.x;
date=.x;
end;
rename share=share_end date=date_end;
format date_start yymmdd10.;
run;[/code:2td93s6v]作者: shiyiming 时间: 2009-9-9 11:16 标题: Re: 交易记录修正问题 楼上代码很好,只是有个局限,如果数据量很大,甚至达到数万条的话就行不通了。作者: shiyiming 时间: 2009-9-9 18:09 标题: Re: 交易记录修正问题 [code:3ua8ek3m]data raw;
input company date yymmdd10. stock $ share;
format date yymmdd10.;
datalines;
1 2003-6-30 000001 34567
1 2003-6-30 000002 56789
1 2003-6-30 000003 12345
2 2003-6-30 000001 345
2 2003-6-30 000002 123
1 2004-6-30 000001 12345
1 2004-6-30 000003 54321
;
proc sort data=raw out=temp;
by company stock date;
run;
data stock_start stock_end;
set temp;
by company stock;
if first.stock then output stock_start;
if last.stock then output stock_end;
run;
proc sql noprint;
create table temp as
select a.company, a.stock, a.date as date_start, a.share as share_start,
b.date as date_end, b.share as share_end,
case share_start-share_end
when 0 then -share_start
else share_start-share_end
end as share_diff
from stock_start a, stock_end b
where a.company=b.company and a.stock=b.stock;
quit;[/code:3ua8ek3m]作者: shiyiming 时间: 2009-9-10 13:24 标题: Re: 交易记录修正问题 谢谢!