[转载]SAS 通过libname将dataset输出至excel时可能遇到的问题

1. 变量label无法正常输出?
解决途径:
增加(dblabel=yes)。
libname xls excel "E:example.xls";
data xls.sheet1 (dblabel=yes);
 set test;
run;
libname xls clear;

2. format无效?
解决途径:
第一步,做一份excel模板,将每列数据的格式配置好;
第二步,使用x命令,复制模板。
x 'copy "E:template.xls" "E:output to excel file by libname.xls" & exit';
第三步,将数据输出至"E:output to excel file by libname.xls"中的指定位置。

3. 输出至指定位置?
解决途径:
第一步,打开目标excel,打开“名称管理器”,建立名称为“test_in_xls_1”的变量,并配置该变量定义的区域。保存并退出;
第二步,使用如下代码输出。
libname xls excel "E:example.xls";
proc sql;
 drop table xls.test_in_xls_1;
quit;
data xls.test_in_xls_1 (dblabel=yes);
 set test;
run;
libname xls clear;

4. sheet1与'sheet1$'n的区别?
data xls.'sheet1$'n; * 指向excel的sheet1 ;
data xls.sheet1;    * 指向excel的名称管理器中名为sheet1的变量定义的区域 ;

5. 要输出的数据行数超过65535行?
解决途径:
使用宏,分块输出。
%macro xls_output_macro(sor_tab);
%let flag = %sysfunc(open(&sor_tab,is));  
%if &flag. eq 0 %then %do;  
    %put '数据集不存在';  
%end;  
%else %do;  
    %let close = %sysfunc(close(&flag.)); 
 data _null_;
  set &sor_tab. nobs=n;
  call symput('tot_page', ceil(n/65000));
  stop;
 run;
 
 libname xls excel "E:input_or_output_filetext.xls";
 %do ii = 1 %to &tot_page.;
  %let start_obs = %eval_r((&ii.-1)*65000+1);
  %let end_obs = %eval_r(&ii.*65000);
  data xls.page_&ii. (dblabel=yes);
   set &sor_tab.(firstobs=&start_obs. obs=&end_obs.);
  run;
 %end;
 libname xls clear;
%end;
%mend;
*example: %xls_output_macro(sor_tab = test) ;

原文地址:https://www.cnblogs.com/wdkshy/p/12455656.html