|
|
楼主

楼主 |
发表于 2008-3-2 20:51:01
|
只看该作者
从SAS到EXCEL,导出变量Label和format的macro
proc format;
value groupf 1 = '研究药物' 2 = '对照药物';
value sexf 1 = '男' 2 = '女';
run;
data a;
format group groupf. sex sexf.;
label group = '组别' age = '年龄' sex = '性别';
do subid = 1 to 100;
group = mod(subid, 2) + 1;
age = 18 + int(ranuni(0) * 42);
sex = ceil(ranuni(0) * 2);
output;
end;
run;
%macro exportxls(data);
proc contents data = &data out = e noprint; run;
proc sql noprint; select count(*) into :nobs from e; quit;
data e1; set e;
if missing(label) then label = 'miss';
if missing(format) then format = 'miss';
else format = compress(format) || '.';
keep name label format varnum;
run;
data _null_; set e1;
call symput(compress("name" || varnum), left(trim(compbl(name))));
call symput(compress("label" || varnum), left(trim(compbl(label))));
call symput(compress("format" || varnum), left(trim(compbl(format))));
run;
data e2;
format %do i = 1 %to &nobs; c_&&name&i %end; $200.;
%do i = 1 %to &nobs; c_&&name&i = "&&name&i"; %end;
run;
data e3;
format %do i = 1 %to &nobs; c_&&name&i %end; $200.;
%do i = 1 %to &nobs;
%if &&label&i ne miss %then %do; c_&&name&i = "&&label&i"; %end;
%else %do; c_&&name&i = ' '; %end;
%end;
run;
data e4; set &data;
format %do i = 1 %to &nobs; c_&&name&i %end; $200.;
%do i = 1 %to &nobs; %if &&format&i ne miss %then %do; c_&&name&i = put(&&name&i, &&format&i); %end;
%else %do; c_&&name&i = left(&&name&i); %end; %end;
drop %do i = 1 %to &nobs; &&name&i %end;;
run;
data e5; set e2 e3 e4; run;
proc export data = e5 outfile = "c:\a.xls" dbms = excel2000 replace; run;
%mend exportxls;
%exportxls(a); |
|