使用excel标记集导出到excel。

时间:2015-01-12 16:29:05

标签: sas sas-macro

我正在考虑通过excel标记集将数据集的内容导出到excelsheet, 但是,我正在为5个数据集编写代码5次。

我想编写一个宏,它将库中的变量列表连接到数据集列表,这样我就不必多次编写proc内容了。

我写的基本代码是这样的:

    ods tagsets.excelxp file="c:\ECT2013_Mappning1.xls" style=statistical

      options( skip_space='3,2,0,0,1' sheet_interval='none' sheet_name='Datasets'     
suppress_bylines='no');

proc datasets library=work; quit;run;
 ods tagsets.excelxp options( skip_space='3,2,0,0,1' sheet_interval='none'    
sheet_name='Behtid' suppress_bylines='no');

Proc contents data=behtid varnum;run;
 ods tagsets.excelxp options( skip_space='3,2,0,0,1' sheet_interval='none' 
sheet_name='Biverk' suppress_bylines='no');

Proc contents data=biverk varnum;run;
 ods tagsets.excelxp options( skip_space='3,2,0,0,1' sheet_interval='none' 
sheet_name='Dosering' suppress_bylines='no');

ods tagsets.excelxp close;

我想编写一个自动连接数据集的宏,并将带有proc内容的excel标记集执行到库中可用的数据集数量。 我怎么做?

1 个答案:

答案 0 :(得分:0)

我们的宏应该可以在有或没有工作簿路径的情况下调用,因此工作簿路径必须是可选的。 Sas宏知道两种类型的参数:位置强制(这里用于表)和名称可选(这里是工作簿)。

%macro excelOds(sheet, workBook=_same_);
    ods tagsets.excelxp 
        options(sheet_name="&sheet." 
                skip_space='3,2,0,0,1' sheet_interval='none' suppress_bylines='no')
        %if &workBook. NE _same_ %then;
            &excelOds file="&workBook." 
        %end;
    ; %* Do not remove this semicolon: it closes the ods statement;
%mend;

我们第一次包含可选参数,稍后我们不会

%excelOds(Datasets,workBook=c:\ECT2013_Mappning1.xls);
proc datasets library=work; quit;run;

%excelOds(Behtid);
Proc contents data=behtid varnum;run;

** and so further **;

ods tagsets.excelxp close;