|
|
Re: 练手系列3:表关联与累计值计算
看了各位高手的答案,都不好意思把我的拿出来了:(
我是初学,考虑再三,拿出来请大家批评指正,不得已用了一点sql;
基本思路是在A中增加变量计算tvalue,再与B合并
[code:2espumwq]data a;
infile datalines;
input name $ date:yymmdd10. value;
datalines;
A 20070101 1
A 20070102 2
A 20070103 3
A 20070104 4
A 20070105 5
A 20070106 6
A 20070107 7
B 20070101 8
B 20070102 9
;
run;
data b;
infile datalines;
input name $ sdate:yymmdd10. edate:yymmdd10.;
datalines;
A 20070102 20070106
A 20070101 20070104
B 20070101 20070102
;
run;
proc sql;
create table m1 as
select a.value as svalue, b.* from a,b where a.name=b.name and a.date=b.sdate;
proc sql;
create table m2 as
select a.value as evalue, b.* from a,b where a.name=b.name and a.date=b.edate;
quit;
data m;
merge m1 m2;
by name;
run;
data m;
merge m1 m2;
by name;
run;
proc sql noprint;
select count(name) into:num from b;quit;
%macro luijb;
%do n=1 %to #
data _null_;
set b(firstobs=&n obs=&n);
call symput('name',name);
call symput('sdate',sdate);
call symput('edate',edate);
data a;
set a;
if name="&name" and (date-&sdate) ge 0 and (&edate-date) ge 0 then tvalue&n=value;
proc means data=a noprint;
var tvalue1-tvalue&n;
output out=c sum=tvalue1-tvalue&n ;
proc transpose data=c out=c1;
var tvalue1-tvalue&n;
%end;
data c;
set c1(rename=(col1=tvalue));
keep tvalue;
run;
%mend luijb;
%luijb;
data result;
merge c m;
format sdate edate yymmdd10.;
run;
[/code:2espumwq] |
|