目前摸索出一种方法,能实现上述效果,不知道还有没有更好的写法:
/*取出r3所有变量名并排序,赋给宏变量varname*/
proc sql noprint;
select name,varnum
into :varname separated by ' ' ,:varorder
from dictionary.columns
where memname='R3'
order by varnum; quit;
/*把每个变量标签赋给一个单独的变量label_i,并合并到结果数据集中*/
proc sql;
create table label as select varnum,case when label='' then name else label end as label
from dictionary.columns
where memname='R3';
quit;
proc transpose data=label out=label1(drop=_name_) prefix=label_;
id varnum;
var label;
run;
proc sql;
create table r4 as
select * from r3 ,label1 ;
quit;
/*把最后一个变量标签赋给宏变量lastlabel*/
data _null_;
set label nobs=nobs;
call symput("lastlabel",compress('label_'||put(nobs,2.)));
run;
/*打开模板*/
options noxwait noxsync;
x '"D:\输出.xlsx"';
/*写数据*/
filename result dde 'excel|输出!r1c2:r100c50' notab;
data _null_;
set r4;
file result dlm='09'x;
if _n_=1 then put label_1-&lastlabel.;
put &varname.;
run;