---
title: 要約統計量マクロ
tags:  #[第3回大阪sas勉強会]  
author: [森岡裕[SASユーザー総会世話人]](https://convert.docswell.com/user/6484025)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/VJNG89RM78.jpg?width=480
description: [第3回大阪sas勉強会]坂尻大樹
published: March 31, 24
canonical: https://convert.docswell.com/s/6484025/K24D4R-2024-03-31-110922
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/VJNG89RM78.jpg)

要約統計量マクロ
2018.06.22
坂尻大樹


# Page. 2

![Page Image](https://bcdn.docswell.com/page/YE9WK2MWE3.jpg)

--本日の内容-・自己紹介
・要約統計量マクロの紹介
初めて業務で新規作成した帳票(頻度集計、要約統計量)


# Page. 3

![Page Image](https://bcdn.docswell.com/page/GE8NR5LR7D.jpg)

--自己紹介—
・氏名：坂尻 大樹 (サカジリ ヒロキ)
・出身：大阪府 (大東市)
・系歴：大阪桐蔭高校
大阪府立大学大学院 (生命環境科学研究科)
・プログラムはほぼ未経験、手探りでチャレンジ
(学生時代は全角スペースのせいで、小一時間errorに悩む)


# Page. 4

![Page Image](https://bcdn.docswell.com/page/LELPKYL27R.jpg)

要約統計量を出したい
問題点：表示桁の指定、層別の出力、症例数の不足…


# Page. 5

![Page Image](https://bcdn.docswell.com/page/4JM42NM97W.jpg)

初回作成
現在
コードの長さは変わらないけど…
・原データから桁数を取得し、要約統計量の桁数を自動で決定
・classデータによる集計で欠測の取り扱いを楽に


# Page. 6

![Page Image](https://bcdn.docswell.com/page/PJRWMDV979.jpg)

・原データから桁数を取得
%SUMMARY (DS=AAA,VAR=HEIGHT,CVAR=AGE,CSTR=11,CEND=14,RANGE1=4,RANGE2=12);
DATA SUMMARY_KETA1;
SET &amp;DS.;
IF &amp;VAR.^=. THEN KETA=LENGTH( CATS( &amp;VAR.-INT(&amp;VAR.) ) );
RUN;
PROC SUMMARY DATA=SUMMARY_KETA1 ;
VAR KETA;
OUTPUT OUT=SUMMARY_KETA2 MAX=MAXKETA;
RUN;
DATA SUMMARY_KETA3;
SET SUMMARY_KETA2;
IF MAXKETA=1 THEN KETA=0; *小数点第0桁=整数値;
ELSE KETA=MAXKETA-2; *小数点第X桁を格納;
%PUT &amp;KETA.;
CALL SYMPUTX (&quot;KETA&quot;,KETA);
RUN;
原データが少数第一位であることを確認


# Page. 7

![Page Image](https://bcdn.docswell.com/page/PEXPV1Z37X.jpg)

・クラスデータを作成
マクロの中で、実際のデータのフォーマットや
ラベルに合わせるのが面倒…
%SUMMARY (DS=AAA,VAR=HEIGHT,CVAR=AGE,CSTR=11,CEND=14,RANGE1=4,RANGE2=12);
DATA SUMMARY_CLASS;
IF _N_=0 THEN SET &amp;DS. (KEEP=&amp;CVAR.);
DO &amp;CVAR.=&amp;CSTR. TO &amp;CEND.;
OUTPUT;
END;
STOP;
RUN;
OBSは読み込まずに、変数の必要な情報だけを
読み込む
ENDの情報が無いので、STOPステート
メントで処理を止める
実際のデータそのままのクラスデータが完成


# Page. 8

![Page Image](https://bcdn.docswell.com/page/3EKDQ28NJD.jpg)

・要約統計量を算出
%SUMMARY (DS=AAA,VAR=HEIGHT,CVAR=AGE,CSTR=11,CEND=14,RANGE1=4,RANGE2=12);
*要約統計量;
PROC SUMMARY DATA=&amp;DS. CLASSDATA=SUMMARY_CLASS EXCLUSIVE NWAY;
CLASS &amp;CVAR.;
VAR &amp;VAR.;
OUTPUT OUT=SUMMARY_1 N= MEAN= STD= MIN= MEDIAN= MAX= NMISS= Q1= Q3= /AUTONAME;
RUN;
DATA SUMMARY_2;
LENGTH PREOUT1-PREOUT9 $12.;
原データから取得した桁数を使い、四捨五入&amp;
SET SUMMARY_1;
桁数を揃えて出力
*表示桁;
PREOUT1=CATS(&amp;VAR._N);
IF &amp;VAR._MEAN^=. THEN PREOUT2=CATS(PUT(ROUND(&amp;VAR._MEAN
,%SYSEVALF(1/10**%EVAL(&amp;KETA+1))),6.%EVAL(&amp;KETA+1)));
IF &amp;VAR._STDDEV^=. THEN PREOUT3=CATS(PUT(ROUND(&amp;VAR._STDDEV ,%SYSEVALF(1/10**%EVAL(&amp;KETA+2))),6.%EVAL(&amp;KETA+2)));
IF &amp;VAR._MIN^=.
THEN PREOUT4=CATS(PUT(ROUND(&amp;VAR._MIN
,%SYSEVALF(1/10**%EVAL(&amp;KETA+0))),6.%EVAL(&amp;KETA+0)));
IF &amp;VAR._Q1^=.
THEN PREOUT5=CATS(PUT(ROUND(&amp;VAR._Q1
,%SYSEVALF(1/10**%EVAL(&amp;KETA+1))),6.%EVAL(&amp;KETA+1)));
IF &amp;VAR._MEDIAN^=. THEN PREOUT6=CATS(PUT(ROUND(&amp;VAR._MEDIAN ,%SYSEVALF(1/10**%EVAL(&amp;KETA+1))),6.%EVAL(&amp;KETA+1)));
IF &amp;VAR._Q3^=.
THEN PREOUT7=CATS(PUT(ROUND(&amp;VAR._Q3
,%SYSEVALF(1/10**%EVAL(&amp;KETA+1))),6.%EVAL(&amp;KETA+1)));
IF &amp;VAR._MAX^=.
THEN PREOUT8=CATS(PUT(ROUND(&amp;VAR._MAX
,%SYSEVALF(1/10**%EVAL(&amp;KETA+0))),6.%EVAL(&amp;KETA+0)));
PREOUT9=CATS(&amp;VAR._NMISS);
*欠損の取り扱い;
ARRAY AR _CHARACTER_;
DO OVER AR;
IF AR=&quot;&quot; THEN AR=&quot;-&quot;;
END;
*ID変数;
ID+1;
KEEP ID &amp;CVAR. PREOUT1-PREOUT9;
RUN;
注：一部です


# Page. 9

![Page Image](https://bcdn.docswell.com/page/L73RP42ZJ5.jpg)

・整形&amp;出力
%SUMMARY (DS=AAA,VAR=HEIGHT,CVAR=AGE,CSTR=11,CEND=14,RANGE1=4,RANGE2=12);
*整形;
PROC TRANSPOSE DATA=SUMMARY_2 OUT=SUMMARY_3 (DROP=_NAME_)
PREFIX=OUT;
VAR PREOUT1-PREOUT9;
ID ID;
RUN;
*出力;
FILENAME XLS DDE &quot;EXCEL
|\\[&amp;BOOK.]&amp;SHEET.!R&amp;RANGE1.C3:R&amp;RANGE2.C%EVAL(3+&amp;CEND-&amp;CSTR)&quot;;
DATA _NULL_;
FILE XLS NOTAB LRECL=10000 dsd dlm=&#039;09&#039;x;
SET SUMMARY_3;
DMY = .;
PUT OUT1-OUT%EVAL(1+&amp;CEND-&amp;CSTR);
RUN;
完成です!!


# Page. 10

![Page Image](https://bcdn.docswell.com/page/87DYLQZ47G.jpg)

ありがとうございました。


