2019年4月23日火曜日

文字列を抽出するSUBSTRN関数





文字列から指定した位置の文字列を抽出する「SUBSTRN関数」と「KSUBSTRN関数」を紹介したいと思います。




SUBSTRN関数



構文
SUBSTRN( Variable, Start, Length )


Variable … 対象変数 or 対象文字
Start      … 何バイト目から抽出を開始するか
Length   … 抽出するバイト数(省略するとStart以降のすべての文字が抽出される)

  • Start と Length は「バイト数」で指定。
  • シングルバイト文字専用の関数です。日本語などのマルチバイト文字には対応していません。



例.
data test;
input x:$50.;
cards;
Orange
SAS
;

data out1;
    set test;
    length y1 y2 $50.;
    y1 = substrn( x, 2, 3 );
    y2 = substrn( x, 2 );
run;
;
  X
  Y1  
  Y2  
 Orange ran  range 
 SAS  AS  AS



KSUBSTRN関数



構文
KSUBSTRN( VariableStartLength )


Variable … 対象変数 or 対象文字
Start      … 何文字目から抽出を開始するか
Length   … 抽出する文字数(省略するとStart以降のすべての文字が抽出される)

  • Start と Length は「文字数」で指定(たとえば半角の「a」も全角の「A」も1文字でカウント)
  • 日本語などのマルチバイト文字に対応しています。


例.
data test2;
input x:$50.;
cards;
あいうえお
abcde
;

data out2;
    set test2;
    length y1 y2 $50.;
    y1 = ksubstrn( x, 2, 3 );
    y2 = ksubstrn( x, 2 );
run;

  X
  Y1  
  Y2  
 あいうえお いうえ いうえお 
 abcde bcd bcde




See also

SUBSTR vs SUBSTRN



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

 プロシジャの結果を新しいシートに出力する。出力後は前の設定に戻る(下の方に例あり)
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_NAME … シート名の設定



構文
ODS EXCEL OPTIONS( 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入門: 基本構文




ODS EXCELの構文や機能をまとめていきたいと思います。
まずは基本構文から。




基本構文

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

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

ODS EXCEL CLOSE;




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入門記事一覧


注意点


データセットと変数の定義(属性)を表示する【CONTENTSプロシジャ】




CONTENTSプロシジャで、データセットと変数の定義情報を表示することが出来ます。




データセットと変数の定義情報を表示する

proc contents data=sashelp.class varnum;
run;



  • データセットと変数の定義情報が結果ビューアに表示されます。
  • 「data=」に対象のデータセットを指定。
  • 「varnum」を指定すると、変数定義(上の出力イメージの一番最後に出力されている表)に表示する変数名をデータセットに格納されている順番に表示します(デフォルトでは変数名のアルファベット順)




変数定義をデータセットに出力する

proc contents data=sashelp.class out=out1 noprint;
run;



  • 「out=」に出力先のデータセットを指定。
  • 「noprint」で結果ビューアへの表示を抑制(データセットに出力したいだけで、結果ビューアへの表示は不要なので)



2019年4月3日水曜日

ODS POWERPOINTで背景画像を設定する。





桜みてきました!









てことで、「ODS POWERPOINT」でこの桜を背景画像に設定してみましょう。
SAS9.4のM3から「BACKGROUNDIMAGE」というオプションで背景画像を指定できます。





ods powerpoint file="出力先パス\test.pptx"
                         options(backgroundimage="画像ファイルのパス\sakura1.jpg");

    title color="white" "TABULATE";
    proc tabulate data=sashelp.class style={background=white};
        var height;
        class age;
        table age,height*(n mean std);
    run;

ods powerpoint close;


うーむ、やっぱ背景の主張が激しい。
透過度が設定できればいいんだけど、現状のSASでは設定できないっぽい。
あとサイズ調整とかも出来ないっぽい。



プレゼン資料を全部ODS POWERPOINTで作ってみたいです。