ラベル ODS EXCEL の投稿を表示しています。 すべての投稿を表示
ラベル ODS EXCEL の投稿を表示しています。 すべての投稿を表示

2019年9月11日水曜日

ODS EXCELでセル書式を設定する




PROC REPORTなどで使える「STYLE=オプション」で書式を設定することができますが、ODS EXCELで使うと、EXCELのセル書式を設定できてしまいます。



今回使用するPROC REPORTの「STYLE=オプション」や「COMPUTE」まわりの機能については、必要に応じて以下記事を参照下さい。




ods excel file='c:\test.xlsx';

proc report data=sashelp.class missing  style( header ) = [ background=blue color=white ];
    column sex name age height weight;
    define   sex / order order=internal;
    compute weight;
        if age.sum > 12 then do;
             call define( "age.sum", "style",  "style = [ color=red ]" );
             call define( "name"     , "style",  "style = [ background=yellow ]" );
        end;
    endcomp;
run;

ods excel close;





2019年6月18日火曜日

ODS EXCEL入門: 表示倍率の設定




またまたODS EXCELの記事です。
ZOOMオプションで画面の表示倍率が設定できます。そんなことも出来るんですね~


構文

ODS EXCEL OPTIONS(  ZOOM = "表示倍率"  );






ods excel file="出力するパスを指定\test1.xlsx" options( zoom="50" );

    proc report data=sashelp.cars;
    run;

ods excel close;


2019年6月6日木曜日

ODS EXCEL入門: セル内折り返しの設定





以前書いた以下の記事について、もうちょっと掘り下げたいと思います。
ODS EXCELで「セル内改行」されてしまうところを「セル内折り返し」に変える



まずは以下をご覧ください。

ods excel file="出力するパスを指定\test1.xlsx";

    proc report data=sashelp.cars;
    run;

ods excel close;


H1セルの値「Engine Size (L)」はパッと見「セル内折り返し」に見えて、実は「セル内改行」されてます。
こんな感じでODS EXCELでは横幅が足りない場合、勝手にセル内改行になってしまいます。



この「勝手なセル内改行」を無効にして「セル内折り返し」にするオプションが今回紹介する「FLOW=オプション」です。






構文

ODS EXCEL OPTIONS(  FLOW = "設定値"  );


  • SAS9.4M5からの新機能です。
  • FLOW=には設定値として「セル番地」「HEADER」「ROWHEADER」「DATA」「TABLE」「TEXT」が用意されています。



では各設定値がどのような動きをするのか、1つずつ見ていきましょう。





FLOW = "セル番地"


指定セルの「勝手なセル内改行を無効」&「セル内折り返し」にする。

ods excel file="出力するパスを指定\test1.xlsx"  options( flow="H1" );

    proc report data=sashelp.cars;
    run;

ods excel close;





FLOW = "HEADER"


表のヘッダー部分だけ「勝手なセル内改行を無効」&「セル内折り返し」にする。

ods excel file="出力するパスを指定\test1.xlsx"  options( flow="header" );

    proc report data=sashelp.cars;
    run;

ods excel close;





FLOW = "DATA"


表のデータ部分だけ「勝手なセル内改行を無効」&「セル内折り返し」にする。

ods excel file="出力するパスを指定\test1.xlsx"  options( flow="data" );

    proc report data=sashelp.cars;
    run;

ods excel close;



FLOW = "ROWHEADER"


行ヘッダーだけ「勝手なセル内改行を無効」&「セル内折り返し」にする。
たとえば、以下のようにIDとして設定した変数MAKEとMODELが行ヘッダーとなり、A~B列が設定対象になります。

ods excel file="出力するパスを指定\test1.xlsx"  options( flow="rowheader" );

    proc report data=sashelp.cars;
        define make / id;
        define model / id;
    run;

ods excel close;




FLOW = "TABLE"


こちらは「"HEADER"」「"ROWHEADER"」「"DATA"」をすべてカバーした機能を持っています。




FLOW = "TEXT"


これは大分説明が必要なんですが、以下をご覧ください。

ods excel file="出力するパスを指定\test1.xlsx" ;

ods excel text="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    proc report data=sashelp.cars;
        column type origin;
    run;

ods excel close;


「ODS EXCEL TEXT="出力するテキスト"」でExcelにテキストを出力することが出来るんですが、上の例でA1セルに出力されたテキストがずらーーーーっとD1セルの領域にまで侵入していますね。


そこで、FLOW="TEXT"を指定すると、、

ods excel file="出力するパスを指定\test1.xlsx"  options( flow="text" );

ods excel text="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    proc report data=sashelp.cars;
        column type origin;
    run;

ods excel close;

このテキストに対して「セル結合」&「セル内折り返し」が設定されます。





ちなみに


以下のようにカンマで区切って複数設定することも可能です。

ods excel file="出力するパスを指定\test1.xlsx"  options( flow="table,text" );




2019年6月4日火曜日

ODS EXCELで「ヘッダー・フッター」の書式を設定する




以前、ODS EXCELでヘッダーとフッターを設定する方法を紹介しました。



上の記事の番外編でちょっとしたテクニックを紹介したいと思います。



これはSASではなくExcel側の機能なんですが、以下の「VBAコード」や「書式コード」と呼ばれるものを用いて、ヘッダー・フッターに書式を設定することが出来ます。

  書式コード    機能    
 &L 文字を左側に表示する 
 &C 文字を中央部に表示する
 &R 文字を右側に表示する
 &B 文字を太文字にする
 &I 文字を斜体にする
 &U 文字を下線付きにする
 &"フォント名" 指定したフォントにする(ダブルクォーテーションで囲って指定)
 &Kカラー 指定したカラーにする(16進カラーコードを指定)
 &nn 指定したフォントサイズにする(nnには2桁の数値を指定)
  VBAコード    機能    
 &D 現在の日付を表示
 &T  現在の時刻を表示
 &Z ファイルパスを表示
 &F   ファイル名を表示
 &A シート名を表示
 &P   ページ番号を表示
 &N  総ページ数を表示
 ...等々





title '&Lあいうえお&Rかきくけこ';
footnote '&"Arial"&P/&"Arial"&N';

ods excel file="出力するパスを指定\test.xlsx" options(  flow = "table" );

    proc report data=sashelp.class;
        define _character_ / style(column)={tagattr='type:String format:@'};
    run;

ods excel close;



注意点

文字をダブルクォーテーションで囲むと「&L」などのコードがマクロ変数と認識されちゃいます。

title "&Lあいうえお&Rかきくけこ";

シングルクォーテーションで囲んでマクロ変数に見られないようにしときましょう。



また、「&」を含む文字自体をヘッダー・フッターに設定したい場合は注意。
例えばヘッダーに「A&B」と設定した場合、「&B」が太文字の書式コードとして誤認されます。

title 'A&B';

「A&&B」とすれば、Excelの印刷プレビュー等で見た時に「A&B」のまま、かつ太文字にならずに表示できます
(内部では「A&&B」のまま)


とにもかくにも、「&」まわりはExcel側の挙動なので、詳細はExcelのヘッダー・フッターに設定できる書式コード・VBAコード、として調べてみて下さい。




落とし穴


「TITLEステートメント」または「FOOTNOTEステートメント」を使ってヘッダー・フッターを設定する場合は先ほどの方法でOKでしたが、、


今度は以下のように「PRINT_HEADER」または「PRINT_FOOTER」を使ってヘッダー・フッターを設定した場合は、、

title;
footnote;

ods excel file="出力するパスを指定\test.xlsx" options(
    
flow = "table"
    print_header = '&Lあいうえお'
    print_footer = '&Rかきくけこ' );

    proc report data=sashelp.class;
        define _character_ / style(column)={tagattr='type:String format:@'};
    run;

ods excel close;


生成されたExcelを開こうとすると、上のようなメッセージが出てしまいます。なんかぶっ壊れたらしい。


SASのバージョンにもよるのかもしれません。もし上のようにぶっ壊れてしまったら、以下のように「&」を「&」に置き換えるとうまくいきます。

title;
footnote;
ods excel file="出力するパスを指定\test.xlsx" options(
    
flow = "table"
    print_header = '&Lあいうえお'
    print_footer = '&Rかきくけこ' );

    proc report data=sashelp.class;
        define _character_ / style(column)={tagattr='type:String format:@'};
    run;


ods excel close;




2019年6月3日月曜日

ODS EXCEL入門: 出力位置の指定





最近、ODS EXCELの記事書きすぎ。。
それは置いといて、ODS EXCELでプロシジャの出力位置を指定する方法を紹介します。



構文
ODS EXCEL OPTIONS( START_AT = "出力列, 出力行" );



例1
ods excel file="出力するパスを指定\test1.xlsx"  options( start_at="2,3" );

proc report data=sashelp.class;
run;

ods excel close;

2列3行目から出力しています。



2019年5月31日金曜日

ODS EXCEL入門: 行と列の設定




今回は以下のオプションをご紹介します。
  • HIDDEN_COLUMNS
  • HIDDEN_ROWS
  • ABSOLUTE_ROW_HEIGHT
  • ABSOLUTE_COLUMN_WIDTH
  • ROW_HEIGHTS




行と列を非表示にする



構文
ODS EXCEL OPTIONS(
        HIDDEN_ROWS = "非表示にする行" 
        HIDDEN_COLUMNS = "非表示にする列" 
);




ods excel file="出力するパスを指定\test1.xlsx"  options(
    hidden_rows = "1-3,5"
    hidden_columns = "1,2" );

    proc report data=sashelp.class;
    run;

ods excel close;


  • hidden_rows = "1-3,5"
1~3、5行目を非表示にしています。

  • hidden_columns = "1,2" 
1、2列目を非表示にしています。





行の高さと列の幅



構文
ODS EXCEL OPTIONS(
       ABSOLUTE_ROW_HEIGHT = "行の高さ" 
       ABSOLUTE_COLUMN_WIDTH = "列の幅" 
);




ods excel file="出力するパスを指定\test2.xlsx"  options(
    absolute_row_height = "0.5in"
    absolute_column_width = "0.5in, 1in" );

    proc report data=sashelp.class;
    run;

ods excel close;


  • absolute_row_height = "0.5in"
全ての行の高さを0.5インチに設定。

  • absolute_column_width = "0.5in,1in"
1列目「0.5インチ」、2列目「1インチ」、
3列目「0.5インチ」、4列目「1インチ」、
5列目「0.5インチ」、、、

...と繰り返すように列幅を設定。





行の種類ごとに高さを設定する


以下のようにタイトルの行とか、BYLINEの行とか、行の種類毎に高さを設定することができます。





構文
ODS EXCEL OPTIONS(  ROW_HEIGHTS = "table header の高さ ,
                                                                         table body の高さ ,
                                                                         BY lines の高さ ,
                                                                         titles の高さ ,
                                                                         footers の高さ ,
                                                                         page break の高さ ,
                                                                         paragraph skip の高さ"
);


  • 上の構文の「page break」が何の高さなのか、よく分からんです。改ページの高さって??分かる方教えて。。
  • paragraph skip」ってのは、各段落(タイトル行とかBY値の行とか)の間に空白行がありますよね?その空白行のことです。




title "MyTitle";

ods excel file="出力するパスを指定\test3.xlsx"  options(
    embedded_titles = "on"
    row_heights = "0.5in, 0.3in, 0, 0, 0, 0, 0.1in" );

    proc report data=sashelp.class;
    run;

ods excel close;


  • row_heights = "0.5in, 0.3in, 0, 0, 0, 0, 0.1in"

表のヘッダー        「0.5インチ」
表の中身               「0.3インチ」
段落の間の空白行 「0.1インチ」

...というように行の要素ごとに高さを設定しています。

設定しない要素には「0」を入れておきます。





ODS EXCEL入門記事一覧


注意点

2019年5月27日月曜日

ODS EXCEL入門: 改ページの設定




ODS EXCELで改ページを設定する以下のオプションをご紹介。

  • ROWBREAKS_COUNT
  • ROWBREAKS_INTERVAL




ROWBREAKS_COUNT … 何行毎に改ページを入れるか設定


構文
ODS EXCEL OPTIONS( ROWBREAKS_COUNT = "行数" );




ods excel file="出力するパスを指定\test1.xlsx"  options(
    flow="table"
    rowbreaks_count = "3" );

    proc report data=sashelp.class;
        define _character_ / style(column)={tagattr='type:String format:@'};
    run;

ods excel close;

3行毎に改ページを設定してます。1行目の項目名のとこはノーカウント。





ROWBREAKS_INTERVAL … 改ページの入れ方


構文
ODS EXCEL OPTIONS( ROWBREAKS_INTERVAL = "改ページの入れ方" );


改ページの入れ方は以下が設定できます。

  指定      結果    
 OUTPUT

 出力オブジェクト毎に改ページを入れる

 PROC

 プロシジャ毎に改ページを入れる 

 NONE

 改ページを設定(明示)しない



1個目の「出力オブジェクト」って何?って方は以下「ODS TRACE」を理解すると、なんとなくわかるかと思います。
http://sas-boubi.blogspot.com/2015/07/ods-traceods-output.html




ods excel file="出力するパスを指定\test2.xlsx"  options(
    flow="table"
    sheet_interval="none"

    rowbreaks_interval= "output" );

    proc univariate data=sashelp.class;
        var age;
    run;

ods excel close;

2019年5月23日木曜日

ODS EXCEL入門: EXCELの「ページ設定」の「シート」タブの内容を設定する




EXCELの「ページ設定」→「シート」タブの内容をODS EXCEL側で設定する方法をご紹介。




以下ODS EXCELで「シート」タブの内容を設定する構文。上のと見比べて、どう対応してるか確認してみてください。


構文
ODS EXCEL OPTIONS(   
    PRINT_AREA = "セル"                     /* 印刷範囲 */ 
    ROW_REPEAT = "行"                      /* タイトル行 */
    COLUMN_REPEAT = "列"               /* タイトル列 */
    GRIDLINES = "ON"                          /* 印刷 : 枠線 */
    BLACKANDWHITE = "ON"              /* 印刷 : 白黒印刷 */
    DRAFTQUALITY = "ON"                  /* 印刷 : 簡易印刷 */
    ROWCOLHEADINGS = "ON"          /* 印刷 : 行列番号 */
    PAGE_ORDER_ACROSS = "ON"   /* ページの方向 : 上から下 */
);



ods excel file="出力するパスを指定\test.xlsx" options(
    flow = "table"
    print_area = "A1:G9"
    row_repeat = "1-3"
    column_repeat = "1-2"
    gridlines = "on"
    page_order_across = 'on'
);

    proc report data=sashelp.class;
        define _character_ / style(column)={tagattr='type:String format:@'};
    run;

ods excel close;



2019年5月22日水曜日

ODS EXCEL入門: EXCELの「ページ設定」の「ヘッダー/フッター」タブの内容を設定する





EXCELの「ページ設定」→「ヘッダー/フッター」タブで、ヘッダーとフッターを設定できるけど、それをODS EXCEL側で設定する方法をご紹介。




今回は以下のオプションについて解説しています。
  • PRINT_HEADER
  • PRINT_FOOTER
  • EMBEDDED_TITLES
  • EMBEDDED_FOOTNOTES
  • EMBED_TITLES_ONCE
  • EMBED_FOOTNOTES_ONCE




ヘッダー/フッターの設定


構文
ODS EXCEL OPTIONS(   
        PRINT_HEADER = "ヘッダーテキスト" | "NONE"
        PRINT_FOOTER = "フッターテキスト" | "NONE"
);

※ "NONE" を指定すると未設定となる。


title;
footnote;

ods excel file="出力するパスを指定\test.xlsx" options(
    flow = "table"
    print_header = "myへっだー"
    print_footer = "myふったー");

    proc report data=sashelp.class;
        define _character_ / style(column)={tagattr='type:String format:@'};
    run;

ods excel close;





ただし、以下のように「TITLEステートメント」や「FOOTNOTEステートメント」が設定されている場合は、そちらがExcelの「ヘッダー/フッター」として優先されます。


title "titleステートメントが優先される";
footnote "footnoteステートメントが優先される";

ods excel file="出力するパスを指定\test2.xlsx" options(
    flow = "table"
    print_header = "myへっだー"

    print_footer = "myふったー");

    proc report data=sashelp.class;
        define _character_ / style(column)={tagattr='type:String format:@'};
    run;

ods excel close;



ちなみに以下の記事で「ヘッダー・フッター」の小技を紹介しているので、余裕があったら参考までに。。
ODS EXCELで「ヘッダー・フッター」の書式を設定する





「TITLEステートメント」と「FOOTNOTEステートメント」の設定いろいろ


ここから、おまけ。

以下オプションで「TITLEステートメント」や「FOOTNOTEステートメント」の値を「ヘッダー/フッター」ではなく、セルに出力することが出来ます。


構文
ODS EXCEL OPTIONS(   
    EMBEDDED_TITLES = "ON" | "OFF"
    EMBEDDED_FOOTNOTES = "ON" | "OFF"
);


title "titleをセルに埋め込む";
footnote "footnoteをセルに埋め込む";

ods excel file="出力するパスを指定\test3.xlsx" options(
    flow = "table"
    sheet_interval = "none"
    embedded_titles = 'on'
    embedded_footnotes = 'on'
    );

    proc report data=sashelp.class;
        define _character_ / style(column)={tagattr='type:String format:@'};
        where age=11;
    run;

    proc report data=sashelp.class;
        define _character_ / style(column)={tagattr='type:String format:@'};
        where age=12;
    run;

ods excel close;


TITLEとFOOTNOTEをセルに出力することが出来ました!
ただし、気になるところが。。

上の例では、REPORTプロシジャを2回実行して2つ表を出力していますが、各表毎にTITLEとFOOTNOTEが表示されちゃってます。。




そこで、以下のオプションを指定すると、TITLEとFOOTNOTEを一番最初と最後だけに出力するようにできます。


構文
ODS EXCEL OPTIONS(   
     EMBED_TITLES_ONCE = "ON" | "OFF"
     EMBED_FOOTNOTES_ONCE = "ON" | "OFF"
);


title "titleをセルに埋め込む";
footnote "footnoteをセルに埋め込む";

ods excel file="出力するパスを指定\test4.xlsx" options(
    flow = "table"
    sheet_interval = "none"
    embedded_titles = 'on'
    embedded_footnotes = 'on'
    embed_titles_once = 'on'
    embed_footnotes_once = 'on'
    );

    proc report data=sashelp.class;
        define _character_ / style(column)={tagattr='type:String format:@'};
        where age=11;
    run;

    proc report data=sashelp.class;
        define _character_ / style(column)={tagattr='type:String format:@'};
        where age=12;
    run;

ods excel close;


こっちの方がスッキリしてていいですね。





ODS EXCEL入門記事一覧


注意点

2019年5月20日月曜日

ODS EXCEL入門: EXCELの「ページ設定」の「余白」タブの内容を設定する




EXCELの「ページ設定」→「余白」タブの内容をODS EXCEL側で設定する方法。



以下が「余白」タブの内容を設定するODS EXCELの構文。上のと見比べてどう対応してるのか確認してみましょう。

構文
ODS EXCEL OPTIONS(   
        PRINT_HEADER_MARGIN = "値"       /* ヘッダー余白 (inch) */
        PRINT_FOOTER_MARGIN = "値"       /* フッター余白 (inch) */
        CENTER_HORIZONTAL = "ON"         /* ページ中央 (水平) */
        CENTER_VERTICAL      = "ON"         /* ページ中央 (垂直) */
);


ヘッダー・フッター以外の余白を設定するオプションがODS EXCELに無いのですが、以下の記事で紹介しているシステムオプションで設定出来ます。

ODS出力時の用紙サイズや余白などを設定するオプション [まとめ]



options papersize=Letter topmargin=2in bottommargin=2in leftmargin=2in rightmargin=2in;

ods excel file="出力するパスを指定\test.xlsx" options(
    flow="table" 
    orientation = 'landscape'
    print_header_margin = "1"
    print_footer_margin = "1"
    center_horizontal = "on" 
    center_vertical = "on");

    proc report data=sashelp.cars;
        define _character_ / style(column)={tagattr='type:String format:@'};
    run;

ods excel close;


上の例で、SAS側で余白を設定するときの単位はインチだけど、Excel側に反映されるときは(日本だと)センチメートルに変換されるんで、そこんとこ気をつけてください。



2019年5月13日月曜日

ODS EXCEL入門: EXCELの「ページ設定」の「ページ」タブの内容を設定する




EXCELの「ページ設定」→「ページ」タブの内容をODS EXCEL側で設定する方法。



以下が「ページ」タブの内容を設定するODS EXCELの構文。上のと見比べてどう対応してるのか確認してみましょう。


構文
ODS EXCEL OPTIONS(   
        ORIENTATION = "PORTRAIT" | "LANDSCAPE"  /* 印刷の向き */
        SCALE = "値"                                                        /* 拡大/縮小 */
        FITTOPAGE = "ON" | "OFF"                                 /* 次のページ数に合わせて印刷: 横1×縦1 */
        PAGES_FITWIDTH = "値"                                    /* 次のページ数に合わせて印刷: 横 */
        PAGES_FITHEIGHT = "値"                                  /* 次のページ数に合わせて印刷: 縦 */
        DPI = "値"                                                             /* 印刷品質*/
);

  • DPI(印刷品質)など、一部オプションは環境毎に設定可能な値が決まっているので、ご注意ください(設定不可な値を指定してもEXCELに反映されない)
  • 用紙サイズを変えるオプションがODS EXCELに無いのですが、「PAPERSIZE=」システムオプションで設定出来ます(ODS出力時の用紙サイズや余白などを設定するオプション [まとめ]



options papersize=Letter;
ods excel file="出力するパスを指定\test2.xlsx" options(
    flow="table" 
    orientation = 'landscape'
    pages_fitheight = '5');

    proc report data=sashelp.cars;
        define _character_ / style(column)={tagattr='type:String format:@'};
    run;

ods excel close;






2019年5月8日水曜日

ODS EXCEL入門: 「ウィンドウ枠の固定」の設定





ODS EXCELで「ウィンドウ枠の固定」を設定してみます。




構文
ODS EXCEL OPTIONS(   
                FROZEN_HEADERS         = "固定する行"
                FROZEN_ROWHEADERS = "固定する列"
);



ods excel file="出力するパスを指定\test2.xlsx"  options(  flow="table" frozen_headers="1" frozen_rowheaders="2");

    proc report data=sashelp.cars;
        define _character_ / style(column)={tagattr='type:String format:@'};
    run;

ods excel close;


上の例では1行目と2列目が固定されています。



2019年5月6日月曜日

ODS EXCEL入門: オートフィルタの設定




ODS EXCELでオートフィルタを設定する方法を紹介。



構文
ODS EXCEL OPTIONS( AUTOFILTER = "設定範囲" );



例1
ods excel file="出力するパスを指定\test1.xlsx"  options(  flow="table" autofilter="all" );

proc report data=sashelp.class;
    define _character_ / style(column)={tagattr='type:String format:@'};
run;

ods excel close;

「autofilter = "all"」で全列にオートフィルタを設定できます。



例2
ods excel file="出力するパスを指定\test2.xlsx"  options(  flow="table" autofilter="2" );

proc report data=sashelp.class;
    define _character_ / style(column)={tagattr='type:String format:@'};
run;

ods excel close;


オートフィルタを設定する列を設定しています。
ちなみに「autofilter="B"」みたいな指定も可能です。



例3
ods excel file="出力するパスを指定\test3.xlsx"  options(  flow="table" autofilter="1-3" );

proc report data=sashelp.class;
    define _character_ / style(column)={tagattr='type:String format:@'};
run;

ods excel close;

オートフィルタを設定する列の範囲を設定しています。
ちなみに「autofilter="A:C"」みたいな指定も可能です。

2019年4月16日火曜日

ODS EXCEL入門: シートの設定いろいろ





シートの設定に関する以下のオプションを紹介。

  • SHEET_INTERVAL
  • SHEET_NAME
  • TAB_COLOR




SHEET_INTERVAL … シートの分け方を設定



構文
ODS EXCEL OPTIONS( SHEET_INTERVAL = "シートの分け方" );


シートの分け方は以下が設定できます。

指定 結果
BYGROUP

プロシジャに指定したBYグループ毎にシートを分ける

PAGE

プロシジャが改ページを入れるタイミングでシートも分ける (下の方に補足説明あり)

PROC

プロシジャ毎にシートを分ける

NONE

シートを分けない(1シートに全て出力)

NOW


プロシジャの結果を新しいシートに出力する。
実行直後、SHEET_INTERVALは前の設定に戻る
(下の方に例あり)
SAS9.4M5からの機能

TABLE

プロシジャから出力される表毎にシートを分ける(デフォルトはこの設定)




2つ目の「PAGE」について補足
プロシジャの結果をHTMLに出力すると、以下の緑矢印で示した横線が入ることがありますよね。こっから次のページだよって意味になります。



こんな感じで、プロシジャがページを分けるタイミングでシートも分けるってのが「sheet_interval="page"」です・・・これ見てもよく分かんないと思うんで色々試して確認してみてください。




例1.
proc sort data=sashelp.class out=class;
    by sex;
run;

ods excel file="出力先パス\test.xlsx" options( sheet_interval="bygroup" );

    proc means data=class;
        var height;
        by sex;
    run;

ods excel close;


「sheet_interval="bygroup"」でBY変数SEXの出力結果毎にシートを分けています。




例2.
proc sort data=sashelp.class out=class;
    by sex;
run;

ods excel file="出力先パス\test2.xlsx" options( sheet_interval="none" );

    proc means data=class;
        var height;
        by sex;
    run;

ods excel options( sheet_interval="now" );

    proc means data=class;
        var weight;
        by sex;
    run;

ods excel close;


まず「sheet_interval="none"」で最初のプロシジャの結果をすべて1シートに出力してます。
次に「sheet_interval="now"」で新しいシートを作成して、次のプロシジャの結果を出力します。
「sheet_interval="now"」の実行直後、前の設定「sheet_interval="none"」に戻るので、プロシジャの結果はすべてそのシートに出力されます。




SHEET_NAME … シート名の設定(現時点でシート名は28文字以内まで)



構文
ODS EXCEL OPTIONS( SHEET_NAME = "シート名" );

※ 「SHEET_NAME = "NONE"」とした場合、デフォルトの挙動(つまりSHEET_NAMEオプションを設定しない場合の挙動)になる


例3.
proc sort data=sashelp.class out=class;
    by sex;
run;

ods excel file="出力先パス\test3.xlsx" options( sheet_interval="none" sheet_name="MySheet" );

    proc means data=class;
        var weight;
        by sex;
    run;

ods excel close;





TAB_COLOR … シートタブの色を設定する



構文
ODS EXCEL OPTIONS( TAB_COLOR = "色" );


例4.
proc sort data=sashelp.class out=class;
    by sex;
run;

ods excel file="出力先パス\test4.xlsx" options( tab_color="yellow" );

    proc means data=class;
        var weight;
        by sex;
    run;

ods excel close;





ODS EXCEL入門記事一覧


注意点

2019年4月11日木曜日

ODS EXCEL入門: 基本構文




SAS9.4M3から使用可能になったODS EXCELの構文や機能をまとめていきたいと思います。
まずは基本構文から。




基本構文

ODS EXCEL FILE = "出力するエクセルファイルのフルパス";

     ・・・ 出力するプロシジャを記述 ・・・

ODS EXCEL CLOSE;

※ ODS EXCELはオプション等設定してやらないと、微妙な点が多いです。
本記事の最後に記載した注意点(別記事のリンク)なども参照下さい。




ods excel file="パスを指定\test.xlsx" ;

    proc print data=sashelp.cars;
    run;

    proc means data=sashelp.cars;
        var msrp;
        by make;
    run;

ods excel close;




デフォルトの設定ではプロシジャで出力される表ごとにシートが作られます。上の例では、

  • まずprintプロシジャから1表出力されるので1シート作られます。
  • meansプロシジャではbyグループごとに表を作成しているので、byグループの数だけシートが作られます。





EXCELファイルのプロパティを設定する

ods excel file = "パス\test.xlsx"
                title = "SAS: ODS EXCELの勉強"
                keywords = "SAS, ODS EXCEL"
                category = "SAS"
                comments = "ODS EXCELでプロパティを設定"
                status   = "勉強中"
                author   = "a.matsu";

    proc print data=sashelp.cars;
    run;

ods excel close;


この辺の設定はあんまりしないかもだけど、titleとauthorは設定したいことがあるかもしれない。




ODS EXCEL入門記事一覧


注意点


2019年3月6日水曜日

【小技】ODS EXCELでシート名に「#BYLINE」とかが設定できる。




ODS EXCEL の「SHEET_NAME=」でシート名を設定(現時点で28文字以内まで)できますが、
今回はこの機能の小技をご紹介。



以下をご覧ください。

ods excel file="出力するパスを指定\test1.xlsx"  options(  flow="table" sheet_name='#byval1' );

proc report data=sashelp.cars;
     define _character_ / style(column)={tagattr='type:String format:@'};
     by make;
run;

ods excel close;



BY値ごとにシートを分けて出力してるんですが、シート名にBY値を設定しています。



この例のように実は、SHEET_NAME=オプションには「#BYLINE」「#BYVAR」「#BYVAL」が設定できちゃいます。
リファレンスには何故か書いてなかったと思いますが。


#BYって何?って方は以下を参照ください。
TITLEステートメントでBY値を表示する「#BYLINE、#BYVAL、#BYVAR」



See also
ODS EXCELで文字変数を「文字列」として出力したい。
ODS EXCELで「セル内改行」されてしまうところを「セル内折り返し」に変える



2019年1月25日金曜日

ODS EXCELで「セル内改行」されてしまうところを「セル内折り返し」に変える




前回の記事「ODS EXCELで文字変数を「文字列」として出力したい。」に続き、もう1個「ODS EXCEL」で知っといた方がいいオプションを紹介します(※ SAS9.4M5からの機能です)


以下の例をご覧ください。

ods excel file="出力するパスを指定\test1.xlsx";
proc print data=sashelp.cars (obs=5);
  var model / style={cellwidth=90};
run;
ods excel close;


変数MODELについて、幅を縮めてEXCELに出力したところ、幅に合わせてセル内改行されちゃいました。


そこで以下のオプションを追加すると、、

ods excel file="出力するパスを指定\test2.xlsx" options(flow="table");
proc print data=sashelp.cars (obs=5);
  var model / style={cellwidth=90};
run;
ods excel close;


ちゃんと1行で入って、セル内折り返しに切り替わりました!


幅の関係でセル内改行が入ってしまうところを、セル内折り返しにしてくれるオプションです。
(変数値自体に改行が入ってる場合、改行は残ります)