|
|
板凳

楼主 |
发表于 2005-7-29 23:32:59
|
只看该作者
尝试一下
data bigfirms;
input firm_id industry assets@@;
cards;
1 1 13.2
2 1 14
5 2 15
6 2 16
;
run;
proc sort; by industry;
data smallfirms;
input firm_id industry assets@@;
cards;
8 1 13
9 1 10
10 2 13
11 2 16
;
run;
%macro match_firm (big=,small= ) ;
/*step 1: 检测大公司数量,并赋值给宏变量nbigfirm;*/
data count; set &big end=final;
n+1;
if final then call symput('nbigfirm',n);
run;
%put Number of big companies: &nbigfirm;
/*step 2: 依次取出bigfirm中每一个观测(对应于一个大公司)作为子库,
并分别与smallfirms库一对多横向合并*/
data result; run; *对存放结果的数据集初始化;
%let n=1; *为宏变量赋初值;
%do i=1 %to &nbigfirm;
data a; set &big.; if _n_=&n; obs=_n_+1; source='yes';
call symput("n",obs);
run;
proc sort data=&small. out=b (rename=(firm_id=matching_firm assets=assets2)); by industry; run;
data c; merge a b;by industry; matching_diff =abs(assets-assets2); if source='yes'; run;
proc sort; by firm_id matching_diff ; run;
data match; set c; by firm_id matching_diff; if first.firm_id; run; proc print; run;
data result; set result match; if firm_id=. then delete; run; proc print; run;
%end;
%mend match_firm;
%match_firm(big=bigfirms,
small=smallfirms); |
|