首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ODS Excel不正确的SAS freq表输出

ODS Excel不正确的SAS freq表输出
EN

Stack Overflow用户
提问于 2016-04-14 18:53:11
回答 2查看 435关注 0票数 0

尝试将SAS "proc“结果导出到Excel文件(xlsx),使用企业指南7.12和windows上的SAS 9.4。以下代码示例:

代码语言:javascript
复制
ODS EXCEL
file='C:\Download\example.xlsx'
STYLE=HtmlBlue
OPTIONS ( sheet_interval="none" sheet_name="Results" );

data example;
input ins_cd$ 1-2 decl_aatrim $ 4-8 prog $ 10-13 compt $ 15-18;
cards;
02 20153 7646 XC12
02 20153 7646 AB02
02 20153 7646 CC13
02 20153 9999     
02 20153 7595 PS03
02 20153 7595 PS04
02 20153 6080 XC12
02 20153 6080 XC15
02 20153 6080 CC18
02 20153 6080 DC08
;

proc sort data=example;
by ins_cd decl_aatrim prog compt;
run;

data example2;
set example;
by ins_cd decl_aatrim prog compt;
if first.prog=1 then do;
test=first.prog;
rank=1;
retain rank 1;
end;
else rank=rank+1;
run;

proc freq data=example2;
tables prog*compt;
run;

ods EXCEL close;

如结果查看器中所期望的那样输出freq表,每个进程有4行如下所示:(截断以减少复制粘贴,并粗略翻译freq行标签值):

代码语言:javascript
复制
                           compt                            
                AB02    CC13    CC18    [...]
prog        
6080    Freq       0       0        1      1       0       0        1      1                            
        Pct     0.00    0.00    11.11   11.11   0.00    0.00    11.11   11.11
        row pct 0.00    0.00    25.00   25.00   0.00    0.00    25.00   25.00
        col.pct 0.00    0.00    100.00  100.00  0.00    0.00    50.00   100.00
7595    Freq       0       0        0       0      0 [...]
[...]

但是,当ods生成的xlsx文件在Excel中打开时,freq表如下所示:

代码语言:javascript
复制
prog                    compt                               
Freq
Pct
row pct
col.pct     AB02    CC13    CC18    DC08    PS03    PS04    XC12    XC15    Total
6080           0       0       1       1
            0.00       0   11.11 [...]
            0.00    0.00   25.00
            0.00    0.00  100.00
7595           0
            0.00 [...]

计算freq的四个单元格被合并为一个单元格和每个进程的行。

这个http://support.sas.com/kb/32/115.html似乎与我的问题有关,但是建议的交叉列表解决方案也没有在Excel中提供想要的输出。有什么想法吗?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-15 14:02:08

这是由PROC FREQ的工作方式引起的,ODS解决方案(您所称的结果查看器)没有什么不同。请注意,它有:

代码语言:javascript
复制
<td class="r t stacked_cell data"><table width="100%" border="0" cellpadding="7" cellspacing="0">
<tr>
<td class="r t data top_stacked_value">1</td>
</tr>
<tr>
<td class="r t data bottom_stacked_value">11.11</td>
</tr>
</table></td>

在每个单元格内,一个主表单元格在其中有一个迷你表,其中包含freq/rowpct/colpct/汇总(或者在上面的情况下,在底部标头上有两个元素)。

你可以用多种方法解决这个问题。正如Reeza在另一个答案中所指出的,一种选择是使用PROC TABULATE

另一种选择是通过PROC TEMPLATE编写您自己的表模板;毕竟,PROC FREQ的交叉表就是这样完成的;您可以看看他们是如何做到的,并且可能会改变它。

第三种方法是对输出进行后置处理;由于生成的表拥有所需的所有数据,而不是行,所以可以轻松地编写VBA例程,将格式更改为所需的格式。

票数 0
EN

Stack Overflow用户

发布于 2016-04-14 22:16:19

如果你可以用Proc表格代替。你对你的桌子和外表有更多的控制。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36631616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档