2016-04-14 11 views
0

WindowsのSAS 9.4でEnterpriseガイド7.12を使用して、SAS proc freqの結果をExcelファイル(xlsx)にエクスポートしようとしました。 次のコード例:(以下コピーペーストに切り捨て、及びFREQ行はおおよそ平行移動値をラベル):そう等PROG当たり4行で、結果ビューアに予想通りODS Excelで誤ったSAS freqテーブル出力

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

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

であり、freq計算を伴う4つのセルは、各progに対して1つのセルと行にマージされます。

このhttp://support.sas.com/kb/32/115.htmlは私の問題と関連しているようですが、提案されているクロスリストソリューションは、Excelでも必要な出力を与えません。 アイデアありがとう!

+0

'.xls'の代わりに' .xlsx'拡張子を使用してはいけませんか? – Tom

+0

修正しました。ありがとうございます。これは以前の試みからのものです。しかし、出力はxlsxでは変化しません。 –

答えて

0

これは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> 

細胞を - これ一つのメインテーブルセルは、FREQと/ rowpct/colpct/totalpctその中に(または上記の場合に、その中にミニテーブルを有しています下の見出しの2つの要素)。

これはいくつかの方法で解決できます。 1つの選択肢は、Reezaが別の回答に書いているように、PROC TABULATEを使用することです。

別のオプションは、PROC TEMPLATEで独自のテーブルテンプレートを作成することです。それは結局のところ、PROC FREQのクロス集計が完了した方法です。あなたは彼らがそれをどうやって見て、それを変えるかもしれません。

3番目のオプションは、この出力を後処理することです。結果として得られるテーブルには、必要なすべてのデータが含まれているだけで、行には書かれていないので、VBAルーチンを簡単に書いて、書式を目的の書式に変更することができます。

0

代わりにProc Tabulateを使用することができます。あなたはあなたのテーブルと外観をとにかくコントロールできます。