SAS中文论坛

标题: 从SAS到EXCEL,导出变量Label和format的macro [打印本页]

作者: shiyiming    时间: 2008-3-2 20:51
标题: 从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);




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2