SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1280|回复: 0
打印 上一主题 下一主题

从SAS到EXCEL,导出变量Label和format的macro

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 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);
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-4 17:36 , Processed in 0.066775 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表