2016-11-10 56 views
1

我有一些数据集。 (名 - 表,字段 - 字段1标签= “current.field”) 当我做错误与标签,而Proc出口在Excel中sas

proc export data=work.table label; 
outfile = 'bla bla'; 
DBMS=Excelcs; 
run; 

我得到一个错误:

CLI execute error: [Microsoft][ODBC Excel 
     Driver] 'current.field' is not a valid name. Make sure that it does not include 
     invalid characters or punctuation and that it is not too long.. 

我知道问题出在标签 - 它包含“”。但是我需要这个标签来满足我的需求。有谁知道如何解决这个问题?比你。

+0

这实际上是一个Microsoft Excel问题,而不是SAS问题。 – DomPazz

+0

@DomPazz好的。但是有可能导出到Excel的第二行吗?我将在第一行中使用这些标签准备Excel模板。你有一个例子吗?范围不支持(( – bobby1232

+0

)您的代码不是有效的SAS语法,我现在无法测试它,但我不明白为什么这个时间段作为标签会引发错误。请确保您的代码在没有标签的情况下工作,然后尝试和修改它。你使用的是什么版本的SAS? – Reeza

回答

0

你可以在SAS中做的一件事是修改这些标签,以便它们可以很好地与Excel驱动程序一起玩。以下xl_label()宏将扫描您的表格并从您的标签中删除任何句点(。)。

/* sample data */ 
data work.table; 
    label x ='test1.invalid' y='test2.invalid'; 
    x=1; y='age'; 
run; 

%macro xl_label(lib=,ds=); 
    /* get labels */ 
    ods output variables=vars(keep=variable label); 
    proc contents data=&lib..ds; run; 

    data _null_; set vars; 
    /* modify labels to make them valid for excel */ 
    label=tranwrd(label,'.','_'); 
    /* send to macro variable array */ 
    call symputx(cats('label',_n_) 
     ,"label "!!variable!!'="'!!label!!'";' 
     ,'l'); 
    run; 

    /* update table metadata */ 
    proc datasets nolist library=&lib; 
    modify &ds; 
    %local x; 
    %let x=1; 
    %do %while (%symexist(label&x)); 
    &&label&x /* label statements */ 
    %let x=%eval(&x+1); 
    %end; 
%mend; 

%xl_label(lib=work, ds=table); 
+0

不幸的是,我需要这些标签。有可能将数据集粘贴到Excel表格的第二行? – bobby1232

+0

我已经添加了另一个答案,一个使用Web查询而不是Excel驱动程序。 –

0

如果您需要SAS标签用句号(。)在Excel(第2行),你可以尝试在此blog post概述的方法。

只需将标签关键字添加到PROC导出步骤如下:

/* send data */ 
PROC EXPORT DATA=&libds OUTFILE=_webout DBMS=&type REPLACE LABEL; 
run; 

然后,设置Web查询时,请确保您的目标是在第2行(例如A2)的小区。这对我来说很好,如下所示: example excel results