SAS SUMMARY

【SAS】SUMMARYは集計に便利

投稿日:2021年9月19日 更新日:

今回はSUMMARYについて解説します。


/*正常形*/
data data1;
  契約番号="AAAAAA"; 会社コード="02"; 請求金額=4999;
    output;
  契約番号="AAAAAA"; 会社コード="03"; 請求金額=2000;
    output;
  契約番号="BBBBBB"; 会社コード="06"; 請求金額=2300;
    output;
  契約番号="BBBBBB"; 会社コード="04"; 請求金額=1200;
    output;
  契約番号="BBBBBB"; 会社コード="03"; 請求金額=4000;
    output;
  契約番号="CCCCCC"; 会社コード="03"; 請求金額=7777;
    output;
run;

proc sort data=data1 out=data2; by 契約番号; run;

proc summary data=data2; var 請求金額; by 契約番号; output out=data3; run;

  • by 契約番号を1グループとしてvar 請求金額について集計する
  • 出力はoutput out=

/*out=*/
data data1;
  契約番号="AAAAAA"; 会社コード="02"; 請求金額=4999;
    output;
  契約番号="AAAAAA"; 会社コード="03"; 請求金額=2000;
    output;
  契約番号="BBBBBB"; 会社コード="06"; 請求金額=2300;
    output;
  契約番号="BBBBBB"; 会社コード="04"; 請求金額=1200;
    output;
  契約番号="BBBBBB"; 会社コード="03"; 請求金額=4000;
    output;
  契約番号="CCCCCC"; 会社コード="03"; 請求金額=7777;
    output;
run;

proc sort data=data1 out=data2; by 契約番号; run;

proc summary data=data2 out=data3; var 請求金額; by 契約番号; run;


  • by 契約番号を1グループとしてvar 請求金額について集計する
  • 出力はoutput out=
  • out=だとエラーになる。

/*語順入れ替え1*/
data data1;
  契約番号="AAAAAA"; 会社コード="02"; 請求金額=4999;
    output;
  契約番号="AAAAAA"; 会社コード="03"; 請求金額=2000;
    output;
  契約番号="BBBBBB"; 会社コード="06"; 請求金額=2300;
    output;
  契約番号="BBBBBB"; 会社コード="04"; 請求金額=1200;
    output;
  契約番号="BBBBBB"; 会社コード="03"; 請求金額=4000;
    output;
  契約番号="CCCCCC"; 会社コード="03"; 請求金額=7777;
    output;
run;

proc sort data=data1 out=data2; by 契約番号; run;

proc summary data=data2; output out=data3; by 契約番号; var 請求金額; run;
  • by 契約番号を1グループとしてvar 請求金額について集計する
  • 出力はoutput out=
  • by; var; output out=;は語順入れ替えても動作する。

/*N=*/
data data1;
  契約番号="AAAAAA"; 会社コード="02"; 請求金額=4999;
    output;
  契約番号="AAAAAA"; 会社コード="03"; 請求金額=2000;
    output;
  契約番号="BBBBBB"; 会社コード="06"; 請求金額=2300;
    output;
  契約番号="BBBBBB"; 会社コード="04"; 請求金額=1200;
    output;
  契約番号="BBBBBB"; 会社コード="03"; 請求金額=4000;
    output;
  契約番号="CCCCCC"; 会社コード="03"; 請求金額=7777;
    output;
run;

proc sort data=data1 out=data2; by 契約番号; run;

proc summary data=data2; var 請求金額; by 契約番号; output out=data3 N=; run;
  • by 契約番号を1グループとしてvar 請求金額について集計する
  • 出力はoutput out=
  • 集計関数のうちNを実行する。

/*N=ロット数*/
data data1;
  契約番号="AAAAAA"; 会社コード="02"; 請求金額=4999;
    output;
  契約番号="AAAAAA"; 会社コード="03"; 請求金額=2000;
    output;
  契約番号="BBBBBB"; 会社コード="06"; 請求金額=2300;
    output;
  契約番号="BBBBBB"; 会社コード="04"; 請求金額=1200;
    output;
  契約番号="BBBBBB"; 会社コード="03"; 請求金額=4000;
    output;
  契約番号="CCCCCC"; 会社コード="03"; 請求金額=7777;
    output;
run;

proc sort data=data1 out=data2; by 契約番号; run;

proc summary data=data2; var 請求金額; by 契約番号; output out=data3 N=ロット数; run;

  • by 契約番号を1グループとしてvar 請求金額について集計する
  • 出力はoutput out=
  • 集計関数のうちNを実行する。
  • Nの列名を指定する。

/*by複数指定*/
data data1;
  契約番号="AAAAAA"; 会社コード="02"; 請求金額=4999;
    output;
  契約番号="AAAAAA"; 会社コード="03"; 請求金額=2000;
    output;
  契約番号="BBBBBB"; 会社コード="06"; 請求金額=2300;
    output;
  契約番号="BBBBBB"; 会社コード="04"; 請求金額=1200;
    output;
  契約番号="BBBBBB"; 会社コード="03"; 請求金額=4000;
    output;
  契約番号="CCCCCC"; 会社コード="03"; 請求金額=7777;
    output;
run;

proc sort data=data1 out=data2; by 契約番号 会社コード; run;

proc summary data=data2; var 請求金額; by 契約番号 会社コード; output out=data3 MAX=; run;

  • by 契約番号を1グループとしてvar 請求金額について集計する
  • 出力はoutput out=
  • 集計関数のうちMAXを実行する。
  • byには複数指定できる。

/*varなし*/
data data1;
  契約番号="AAAAAA"; 会社コード="02"; 請求金額=4999;
    output;
  契約番号="AAAAAA"; 会社コード="03"; 請求金額=2000;
    output;
  契約番号="BBBBBB"; 会社コード="06"; 請求金額=2300;
    output;
  契約番号="BBBBBB"; 会社コード="04"; 請求金額=1200;
    output;
  契約番号="BBBBBB"; 会社コード="03"; 請求金額=4000;
    output;
  契約番号="CCCCCC"; 会社コード="03"; 請求金額=7777;
    output;
run;

proc sort data=data1 out=data2; by 契約番号; run;

proc summary data=data2; by 契約番号; output out=data3; run;

  • by 契約番号を1グループとして集計する
  • 出力はoutput out=
  • varが無ければ_TYPE_, _FREQ_のみ。

/*byなし*/
data data1;
  契約番号="AAAAAA"; 会社コード="02"; 請求金額=4999;
    output;
  契約番号="AAAAAA"; 会社コード="03"; 請求金額=2000;
    output;
  契約番号="BBBBBB"; 会社コード="06"; 請求金額=2300;
    output;
  契約番号="BBBBBB"; 会社コード="04"; 請求金額=1200;
    output;
  契約番号="BBBBBB"; 会社コード="03"; 請求金額=4000;
    output;
  契約番号="CCCCCC"; 会社コード="03"; 請求金額=7777;
    output;
run;

proc sort data=data1 out=data2; by 契約番号; run;

proc summary data=data2; var 請求金額; output out=data3; run;
  • byが無ければ、表全体を1グループとしてvar 請求金額について集計。
  • 出力はoutput out=

/*drop=_TYPE_ _FREQ_*/
data data1;
  契約番号="AAAAAA"; 会社コード="02"; 請求金額=4999;
    output;
  契約番号="AAAAAA"; 会社コード="03"; 請求金額=2000;
    output;
  契約番号="BBBBBB"; 会社コード="06"; 請求金額=2300;
    output;
  契約番号="BBBBBB"; 会社コード="04"; 請求金額=1200;
    output;
  契約番号="BBBBBB"; 会社コード="03"; 請求金額=4000;
    output;
  契約番号="CCCCCC"; 会社コード="03"; 請求金額=7777;
    output;
run;

proc sort data=data1 out=data2; by 契約番号; run;

proc summary data=data2; var 請求金額; by 契約番号; output out=data3(drop=_TYPE_ _FREQ_) N=ロット数; run;

  • by 契約番号を1グループとしてvar 請求金額について集計する
  • 出力はoutput out=
  • 集計関数のうちNを実行する。
  • Nの列名を指定する。
  • _TYPE_, _FREQ_もdropできる。

-SAS, SUMMARY

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

【SAS】SASで良く使うテクニック。その12「Ctrl+F」「Ctrl+R」~特定の文字列を検索、置換~【サクラエディタ】

今回はSASで良く使うテクニックということで、特定の文字列を検索、置換したい時は、「Ctrl+F」「Ctrl+R」が役に立つ理由を解説していきます。 以下のようにテーブルがあったとします。(参考:【S …

【SAS】LIBNAMEステートメントはExcelファイルをライブラリとして割り当てることができる。【SAS Base Programming対策5】

今回はLIBNAMEステートメントを用いてExcelファイルをライブラリ参照する方法について触れていきます。 SAS Base Programmingの試験を2回受験しましたが、2回ともExcelファ …

【SAS】SETステートメントに複数データセットを設定すると縦結合できる

今回はSETについて解説します。 /* 1~7 */ data data1; Id1=1111; Char1=”AAAA”; output; Id1=2222; Char1=”BBBB”; outpu …

【SAS】TITLEステートメントは「結果」にタイトルを付けられる

今回はTITLEステートメントについて解説します。 data data1; 番号=”AAAAAA”; コード=”02″; 金額=1999; output; 番号=”AAAAAA”; コード=”05″; …

【SAS】データセットのオブザベーション数で処理を分岐させる方法【IF】【NOBS】

今回は、データセットのオブザベーション数により、処理を分岐させる方法について解説していきたいと思います。 (参考:【SAS】データセットの有無で処理を分岐させる方法【%IF】【EXIST】 | ビジネ …