Sas 如何在最终报告(.xlsx文件)中使用过滤器显示动态结果
我正在编写一份报告(.xlsx文件)。 数据有3列用于销售(sale1、sale2和sale3)。 在最终输出(.xlsx文件)中,我想显示:Sas 如何在最终报告(.xlsx文件)中使用过滤器显示动态结果,sas,report,Sas,Report,我正在编写一份报告(.xlsx文件)。 数据有3列用于销售(sale1、sale2和sale3)。 在最终输出(.xlsx文件)中,我想显示: 各栏之间的合计差额,即sale3栏中的-36(=1008-1044)等,请参见第一张图片 我希望看到最终报告过滤后的结果(过滤器加载为Y),请参见第二张图片- sale3的总计为848(sale2为860,sale1为871),列差异为-12,列百分比变化为(1.40%),最后一行总计差异为-11(=848-860)和-11(=860-871) da
data sales;
input area load $ prod : $ sale1 sale2 sale3;
diff=sale3-sale2;
datalines;
1 Y p1 109 117 138
1 N p1 23 29 20
1 Y p2 78 70 68
1 N p2 63 19 22
2 Y p1 49 36 32
2 N p1 50 39 44
2 Y p3 138 157 158
2 N p3 110 126 107
3 Y p2 251 267 259
3 N p2 182 184 160
;
run;
ods excel close;
ods excel file="/C:/data/t1.xlsx"
options (sheet_name="tab1" frozen_headers='3' frozen_rowheaders='2'
embedded_footnotes='yes' autofilter='1-8');
proc report data=sales nocenter;
column area load prod sale1 sale2 sale3 diff change;
define area -- diff/ display;
define sale1-- diff / analysis sum format=comma12. style(column)=
[cellwidth=.5in];
define change / computed format=percent8.2 '% change' style(column)=
[cellwidth=.8in];
compute change;
change = diff.sum/sale2.sum;
if change >= 0.1 then call define ("change",'STYLE','STYLE=[color=red
fontweight=bold]');
if change <= -0.1 then call define ("change",'STYLE','STYLE=[color=blue
fontweight=bold]');
endcomp;
rbreak after / summarize style=[background=lightblue font_weight=bold];
run;
ods excel close;
数据销售;
输入区域加载$prod:$sale1 sale2 sale3;
diff=sale3-sale2;
数据线;
1 Y p1 109 117 138
1N p1 23 29 20
1 Y p2 78 70 68
1北p2 63 19 22
2 Y p1 49 36 32
2 N p1 50 39 44
2 Y p3 138 157 158
2 N p3 110 126 107
3 Y p2 251 267 259
3 N p2 182 184 160
;
跑
ods excel关闭;
ods excel文件=“/C:/data/t1.xlsx”
选项(sheet_name=“tab1”冻结的标题='3'冻结的标题='2'
嵌入的_脚注='yes'自动筛选='1-8');
过程报告数据=销售数据中心;
柱面积荷载产品sale1 sale2 sale3差异变化;
定义区域——差异/显示;
定义sale1——差异/分析和格式=comma12。样式(列)=
[细胞宽度=.5英寸];
定义更改/计算格式=百分比8.2“%更改”样式(列)=
[cellwidth=.8in];
计算变化;
变更=差异总和/销售额2.总和;
如果更改>=0.1,则调用define(“更改”,“样式”,“样式=[color=red]
fontweight=粗体]');
如果更改,则可以通过将报告
计算的硬和替换为通过调用定义样式(将tagattr设置为Excel公式)传递到单元格的公式,从而使报告合计行具有筛选意识
Excel函数小计(9,范围)
支持筛选,而code9
表示计算总和。ExcelINDIRECT
用于计算总行上方的列单元格范围
例如:
proc report data=sales nocenter;
column area load prod sale1 sale2 sale3 diff change;
define area -- diff/ display;
define sale1-- diff / analysis sum format=comma12. style(column)= [cellwidth=.5in];
define change / computed format=percent8.2 '% change' style(column)= [cellwidth=.8in];
compute change;
change = diff.sum/sale2.sum;
if change >= 0.1 then call define ("change",'STYLE','STYLE=[color=red fontweight=bold]');
if change <= -0.1 then call define ("change",'STYLE','STYLE=[color=blue fontweight=bold]');
endcomp;
* inject Excel formula into summary cell;
compute after;
call define ('sale1.sum', 'style', "style=[tagattr='formula:=SUBTOTAL(9,INDIRECT(CONCATENATE(ADDRESS(2,COLUMN()),"":"",ADDRESS(ROW()-1,COLUMN()))))']");
call define ('sale2.sum', 'style', "style=[tagattr='formula:=SUBTOTAL(9,INDIRECT(CONCATENATE(ADDRESS(2,COLUMN()),"":"",ADDRESS(ROW()-1,COLUMN()))))']");
call define ('sale3.sum', 'style', "style=[tagattr='formula:=SUBTOTAL(9,INDIRECT(CONCATENATE(ADDRESS(2,COLUMN()),"":"",ADDRESS(ROW()-1,COLUMN()))))']");
endcomp;
rbreak after / summarize style=[background=lightblue font_weight=bold];
run;
proc-report-data=sales-nocenter;
柱面积荷载产品sale1 sale2 sale3差异变化;
定义区域——差异/显示;
定义sale1——差异/分析和格式=comma12。样式(列)=[cellwidth=.5in];
定义更改/计算格式=百分比8.2“%change”样式(列)=[cellwidth=.8in];
计算变化;
变更=差异总和/销售额2.总和;
如果更改>=0.1,则调用define(“更改”,“样式”,“样式=[color=red-fontwweight=bold]”);
如果更改ODS,则EXCEL
目标没有预选自动过滤器的功能或选项。自动筛选项目选择将涉及VBA代码或“黑客”进入.xlsx fliedoes。这意味着SAS无法进行自动筛选?ODS EXCEL
可以在启用自动筛选的情况下输出表格数据。您不能直接通过SAS指定所选的初始项(即应用的筛选器),不能。但是通过VBS进行指定,然后从SAS调用该脚本或沿着这些行调用该脚本是相当简单的。你最近也在communities.sas.com上问过这个问题吗?有人问过,我记不起官方的答案是什么,但很可能是类似的。我没有在其他地方问过这个问题。顺便说一句,我可以做最后一行(sale2列中的-9和sale3列中的-36)——也就是说,总数之间的差额吗?