我正在尝试使用 SAS 中的 ODS Excel 在 Excel 中准备报告。该报告包含两张并排放置的三个表格。我使用了 Panelcol 选项,但它在 ODS Excel 中不可用。另外, Start_at= 选项似乎不起作用?
无论如何它可以在ODS Excel中完成吗?请告诉我。任何帮助将不胜感激。
谢谢你,尚卡尔
尚卡尔:
9.4 的 ODS EXCEL 文档声明 start_at= 选项不能在表格中间更改。关联
(START_AT='string') 指定报告的起始单元格。默认从第 1 列和第 1 行开始。 默认 1,1 提示 此选项不能在工作表中间更改。示例 ods excel 选项(start_at="2,2");
所以这个例子不能像你期望的那样工作。第一个 start_at 得到尊重,同一页面上的后续输出被堆叠,同时仍然尊重第一个 start at 列。
ods _all_ close;
ods excel file='%temp%\3-tables-in-first-tab-sample.xlsx'
options (sheet_interval='none')
;
ods excel options (start_at="2,2");
* top of output is upper left corner;
proc print noobs data=sashelp.class(keep=name age);run;
* top of output is to the right and down three rows from the first output;
ods excel options (start_at="5,5");
proc print noobs data=sashelp.class(keep=name weight height);run;
ods excel options (start_at="1,9");
proc print noobs data=sashelp.class(keep=name sex);run;
ods excel close;
将多个表放在一起的一种方法是创建一个以横向方式附加数据的假表。
例子:
%macro RHS_append (out=, data=);
%if not %sysfunc(exist(&out)) %then %do;
data &out; set &data; run;
%return;
%end;
%local nout names labels;
proc contents noprint data=&out out=outvar(keep=name varnum label);
proc contents noprint data=&data out=datavar(keep=name varnum label);
proc sql noprint; select count(*) into :nout trimmed from outvar;
select
cats(name,'=v',&nout+varnum+1)
, case
when label=''
then cats('v',&nout+varnum+1,'=',quote(trim(name)))
else ''
end
into
:names separated by ' '
, :labels separated by ' '
from datavar order by varnum
;
create table gap (v%eval(&nout+1) char(1) label='a0'x);
quit;
data &out;
merge &out gap &data(rename=(&names)); %* rare use of merge without by;
label &labels;
run;
%mend;
options mprint;
proc delete data=foo;
run;
%RHS_append (out=foo, data=sashelp.class);
%RHS_append (out=foo, data=sashelp.gas);
%RHS_append (out=foo, data=sashelp.cars);
ods excel file='%temp%\3-tables-in-first-tab-sample.xlsx';
proc print label data=foo;
run;
ods excel close;