Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ODS Excel的SAS频率表输出不正确_Sas - Fatal编程技术网

ODS Excel的SAS频率表输出不正确

ODS Excel的SAS频率表输出不正确,sas,Sas,尝试使用windows上带SAS 9.4的Enterprise guide 7.12将SAS“proc freq”结果导出到Excel文件(xlsx)。 下面的代码示例: 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

尝试使用windows上带SAS 9.4的Enterprise guide 7.12将SAS“proc freq”结果导出到Excel文件(xlsx)。 下面的代码示例:

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表,每个prog有四行,如下所示:(为减少复制粘贴而截断,粗略转换freq row标签值):

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

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 [...]
对于每个prog,具有freq计算的四个单元格合并为一个单元格和一行

这似乎与我的问题有关,但建议的交叉列表解决方案也没有在Excel中提供所需的输出。
有什么想法吗?谢谢

如果您可以改用Proc TABLATE。无论如何,你对你的桌子和外观有更多的控制权

这是由
PROC FREQ
的工作方式造成的,而ODS HTML解决方案(您称之为结果查看器)也不例外。请注意,它有:

<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>

1.
11.11
在每个单元格内部-因此一个主表单元格中有一个小表,其中包含freq/rowpct/colpct/totalpct(或者在上述情况下,底部标题上的两个元素)

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

另一种选择是通过
PROC-template
编写自己的表模板;毕竟,
PROC-FREQ
的交叉表就是这样完成的;你可以看看他们是怎么做到的,也许可以改变


第三种选择是对该输出进行后处理;由于生成的表包含您想要的所有数据,而不是行,因此您可以轻松编写VBA例程将格式更改为所需的格式

您不应该使用
.xlsx
扩展名而不是
.xls
?更正,谢谢。这是以前的一次尝试。但是输出在xlsx中没有变化。
<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>