2016-04-14 2 views
0

пытается экспортировать результаты SAS «proc freq» в файл Excel (xlsx) с помощью Enterprise guide 7.12 с SAS 9.4 на окнах. Следующий пример кода:Неправильная выходная таблица таблицы SAS с ODS Excel

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, как ожидается, в средстве просмотра результатов, с четырьмя рядами в прог следующим образом: (усеченный за меньшие копии пасты, а частота меток строк значения примерно переведено):

      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 [...] 
[...] 

но когда файл XLSX производства СОД открыт в Excel, таблица частоты выглядит следующим образом:

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. Любые идеи? Благодаря!

+0

Разве вы не используете расширение '.xlsx' вместо' .xls'? – Tom

+0

Исправлено, спасибо. Это было из предыдущей попытки. Но выход не изменяется в xlsx. –

ответ

0

Это связано с тем, как работает PROC FREQ, а решение HTML ODS (то, что вы называете зрителем результатов) ничем не отличается. Обратите внимание на то, что у него есть:

<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/totalpct в нем (или в случае выше, два элемента на нижнем заголовке).

Вы можете решить это несколькими способами. Одним из вариантов является, как отмечает Reeza в другом ответе, использовать PROC TABULATE.

Другой вариант - написать собственный шаблон таблицы через PROC TEMPLATE; в конце концов, кросс-таблица PROC FREQ; вы могли бы посмотреть, как они это сделали, и, возможно, изменить его.

Третьим вариантом было бы постпроцессировать этот выход; поскольку итоговая таблица имеет все необходимые данные, просто не в строках, вы можете легко написать программу VBA, чтобы изменить формат на желаемый.

0

Если вы можете вместо этого использовать Proc Tabulate. В любом случае у вас больше контроля над таблицей и внешним видом.

Смежные вопросы