【发布时间】:2020-10-26 18:51:07
【问题描述】:
我正在编写一份报告(.xlsx 文件)。 数据有 3 列用于销售(销售 1、销售 2 和销售 3)。 在最终输出(.xlsx 文件)中,我喜欢显示:
-
列之间总计的差异,即列sale3中的-36(=1008-1044)等请参见第一张图片
-
我希望看到过滤后的最终报告(过滤器负载='Y')请看第二张图片 - sale3 的总计为 848(sale2 为 860,sale1 为 871),列差异为 -12,列 %change 为 (1.40%),最后一行为 -11 (=848-860) 和-11 (=860-871) 总计差。
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;
【问题讨论】:
-
ODS EXCEL目的地没有用于预选自动过滤器的功能或选项。自动筛选项目选择将涉及 VBA 代码或“入侵”到 .xlsx 文件中 -
这是否意味着 SAS 无法进行自动过滤?
-
ODS EXCEL可以输出启用自动过滤的表格数据。您不能指定最初选择的项目(即应用了过滤器) -
直接通过 SAS,没有。但是通过 VBS 执行此操作然后从 SAS 或类似的方式调用该脚本是相当简单的。您最近是否也在 community.sas.com 上问过这个问题?有人做过,我不记得官方的答案是什么,但很可能是相似的。
-
我没有在其他任何地方问过这个问题。顺便说一句,我可以做最后一行(sale2 列中的-9,sale3 列中的-36) - 即总计之间的差异?