sasを教える・sasを始める 新しいsasの操作方法 sas® … · 2018-07-05 · 要旨:...

20
SASを教える・SASを始める 新しいSASの操作方法 SAS® Enterprise Guide のご案内 古賀信二 SAS Institute Japan株式会社 SHINJI KOGA SAS Institute Japan Ltd. To teach, to start with the new way of using SAS by SAS® Enterprise Guide

Upload: others

Post on 09-Jun-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: SASを教える・SASを始める 新しいSASの操作方法 SAS® … · 2018-07-05 · 要旨: 【sasを教える】【sasを始める】方に新しいsasの操作方法をご案内します。

SASを教える・SASを始める 新しいSASの操作方法

SAS® Enterprise Guide のご案内

古賀信二 SAS Institute Japan株式会社

SHINJI KOGA SAS Institute Japan Ltd.

To teach, to start with the new way of using SAS by

SAS® Enterprise Guide

Page 2: SASを教える・SASを始める 新しいSASの操作方法 SAS® … · 2018-07-05 · 要旨: 【sasを教える】【sasを始める】方に新しいsasの操作方法をご案内します。

要旨: 【SASを教える】【SASを始める】方に新しいSASの操作方法をご案内します。

SASは豊富なプロシジャを提供し、SAS言語をマスターすることで、 望む統計手法を自在に実行できます。 しかし、SASが初めての人にとっては、SAS言語を学ぶことも、習得することも大変です。 また、SASユーザにとっても、人材育成・確保などの課題が発生しています。

キーワード: SAS® Enterprise Guide・SAS Office Analytics

2

Page 3: SASを教える・SASを始める 新しいSASの操作方法 SAS® … · 2018-07-05 · 要旨: 【sasを教える】【sasを始める】方に新しいsasの操作方法をご案内します。

SAS(R) 9.3 Procedures by Base SAS & SAS/STAT

基本統計

様々な相関係数の計算 CORR

度数表・集計表の作成、および 集計データに対する解析

FREQ

基本統計量の算出 MEANS 、 SUMMARY

1変量に対する詳細な分析 UNIVARIATE

データの順位付けと標準化

順位付け RANK

標準化 STANDARD

ユーザー定義 関数の作成

ユーザー定義関数の作成 FCMP(SAS9)

回帰分析

条件の悪いデータに対する線形回帰 ORTHOREG

非線形回帰 NLIN

多変量解析 因子分析 FACTOR

この他にも数多くのプロシジャがあります

Page 4: SASを教える・SASを始める 新しいSASの操作方法 SAS® … · 2018-07-05 · 要旨: 【sasを教える】【sasを始める】方に新しいsasの操作方法をご案内します。

/* --- 共有マクロ関数の開始 --- */ /* save the current settings of XPIXELS and YPIXELS */ /* so that they can be restored later */ %macro _sas_pushchartsize(new_xsize, new_ysize); %global _savedxpixels _savedypixels; options nonotes; proc sql noprint; select setting into :_savedxpixels from sashelp.vgopt where optname eq "XPIXELS"; select setting into :_savedypixels from sashelp.vgopt where optname eq "YPIXELS"; quit; options notes; GOPTIONS XPIXELS=&new_xsize YPIXELS=&new_ysize; %mend; /* restore the previous values for XPIXELS and YPIXELS */ %macro _sas_popchartsize; %if %symexist(_savedxpixels) %then %do; GOPTIONS XPIXELS=&_savedxpixels YPIXELS=&_savedypixels; %symdel _savedxpixels / nowarn; %symdel _savedypixels / nowarn; %end; %mend; /* Conditionally delete set of tables or views, if they exists */ /* If the member does not exist, then no action is performed */ %macro _eg_conditional_dropds /parmbuff; %local num; %local stepneeded; %local stepstarted; %local dsname; %local name; %let num=1; /* flags to determine whether a PROC SQL step is needed */ /* or even started yet */ %let stepneeded=0; %let stepstarted=0; %let dsname= %qscan(&syspbuff,&num,',()'); %do %while(&dsname ne); %let name = %sysfunc(left(&dsname)); %if %qsysfunc(exist(&name)) %then %do; %let stepneeded=1; %if (&stepstarted eq 0) %then %do; proc sql; %let stepstarted=1; %end; drop table &name; %end; %if %sysfunc(exist(&name,view)) %then %do; %let stepneeded=1; %if (&stepstarted eq 0) %then %do; proc sql; %let stepstarted=1; %end; drop view &name; %end; %let num=%eval(&num+1); %let dsname=%qscan(&syspbuff,&num,',()'); %end; %if &stepstarted %then %do; quit; %end; %mend _eg_conditional_dropds; /* Build where clauses from stored process parameters */ %macro _eg_WhereParam( COLUMN, PARM, OPERATOR, TYPE=S, MATCHALL=_ALL_VALUES_, MATCHALL_CLAUSE=1, MAX= , IS_EXPLICIT=0); %local q1 q2 sq1 sq2; %local isEmpty; %local isEqual isNotEqual; %local isIn isNotIn; %local isString; %local isBetween; %let isEqual = ("%QUPCASE(&OPERATOR)" = "EQ" OR "&OPERATOR" = "="); %let isNotEqual = ("%QUPCASE(&OPERATOR)" = "NE" OR "&OPERATOR" = "<>"); %let isIn = ("%QUPCASE(&OPERATOR)" = "IN"); %let isNotIn = ("%QUPCASE(&OPERATOR)" = "NOT IN"); %let isString = (%QUPCASE(&TYPE) eq S or %QUPCASE(&TYPE) eq STRING ); %if &isString %then %do; %let q1=%str(%"); %let q2=%str(%"); %let sq1=%str(%'); %let sq2=%str(%'); %end; %else %if %QUPCASE(&TYPE) eq D or %QUPCASE(&TYPE) eq DATE %then %do; %let q1=%str(%"); %let q2=%str(%"d); %let sq1=%str(%'); %let sq2=%str(%'); %end; %else %if %QUPCASE(&TYPE) eq T or %QUPCASE(&TYPE) eq TIME %then %do; %let q1=%str(%"); %let q2=%str(%"t); %let sq1=%str(%'); %let sq2=%str(%'); %end; %else %if %QUPCASE(&TYPE) eq DT or %QUPCASE(&TYPE) eq DATETIME %then %do; %let q1=%str(%"); %let q2=%str(%"dt); %let sq1=%str(%'); %let sq2=%str(%'); %end; %else %do; %let q1=; %let q2=; %let sq1=; %let sq2=; %end; %if "&PARM" = "" %then %let PARM=&COLUMN; %let isBetween = ("%QUPCASE(&OPERATOR)"="BETWEEN" or "%QUPCASE(&OPERATOR)"="NOT BETWEEN"); %if "&MAX" = "" %then %do; %let MAX = &parm._MAX; %if &isBetween %then %let PARM = &parm._MIN; %end; %if not %symexist(&PARM) or (&isBetween and not %symexist(&MAX)) %then %do; %if &IS_EXPLICIT=0 %then %do; not &MATCHALL_CLAUSE %end; %else %do; not 1=1 %end; %end; %else %if "%qupcase(&&&PARM)" = "%qupcase(&MATCHALL)" %then %do; %if &IS_EXPLICIT=0 %then %do; &MATCHALL_CLAUSE %end; %else %do; 1=1 %end; %end; %else %if (not %symexist(&PARM._count)) or &isBetween %then %do; %let isEmpty = ("&&&PARM" = ""); %if (&isEqual AND &isEmpty AND &isString) %then &COLUMN is null; %else %if (&isNotEqual AND &isEmpty AND &isString) %then &COLUMN is not null; %else %do; %if &IS_EXPLICIT=0 %then %do; &COLUMN &OPERATOR %unquote(&q1)&&&PARM%unquote(&q2) %end; %else %do; &COLUMN &OPERATOR %unquote(%nrstr(&sq1))&&&PARM%unquote(%nrstr(&sq2)) %end; %if &isBetween %then AND %unquote(&q1)&&&MAX%unquote(&q2); %end; %end; %else %do; %local emptyList; %let emptyList = %symexist(&PARM._count); %if &emptyList %then %let emptyList = &&&PARM._count = 0; %if (&emptyList) %then %do; %if (&isNotin) %then 1; %else 0; %end; %else %if (&&&PARM._count = 1) %then %do; %let isEmpty = ("&&&PARM" = ""); %if (&isIn AND &isEmpty AND &isString) %then &COLUMN is null; %else %if (&isNotin AND &isEmpty AND &isString) %then &COLUMN is not null; %else %do; %if &IS_EXPLICIT=0 %then %do; &COLUMN &OPERATOR (%unquote(&q1)&&&PARM%unquote(&q2)) %end; %else %do; &COLUMN &OPERATOR (%unquote(%nrstr(&sq1))&&&PARM%unquote(%nrstr(&sq2))) %end; %end; %end; %else %do; %local addIsNull addIsNotNull addComma; %let addIsNull = %eval(0); %let addIsNotNull = %eval(0); %let addComma = %eval(0); (&COLUMN &OPERATOR ( %do i=1 %to &&&PARM._count; %let isEmpty = ("&&&PARM&i" = ""); %if (&isString AND &isEmpty AND (&isIn OR &isNotIn)) %then %do; %if (&isIn) %then %let addIsNull = 1; %else %let addIsNotNull = 1; %end; %else %do; %if &addComma %then %do;,%end; %if &IS_EXPLICIT=0 %then %do; %unquote(&q1)&&&PARM&i%unquote(&q2) %end; %else %do; %unquote(%nrstr(&sq1))&&&PARM&i%unquote(%nrstr(&sq2)) %end; %let addComma = %eval(1); %end; %end;) %if &addIsNull %then OR &COLUMN is null; %else %if &addIsNotNull %then AND &COLUMN is not null; %do;) %end; %end; %end; %mend; /* --- 共有マクロ関数の終了 --- */ /* --- "分布" のコードの開始 --- */ LIBNAME ECLIB000 "C:¥SAS¥Data¥SASData¥DEMOSFJ"; /* ------------------------------------------------------------------- SAS タスクにより生成されたコード 作成日: 2014年6月26日 14:47:23 タスク: 分布 入力データ: C:¥SAS¥Data¥SASData¥DEMOSFJ¥sales.sas7bdat サーバー: Local ------------------------------------------------------------------- */ %_eg_conditional_dropds(WORK.SORTTempTableSorted); /* ------------------------------------------------------------------- SHEWHART プロシジャは DEVICE=ACTIVEX をサポートしません。PNG に切り替えます。 ------------------------------------------------------------------- */ OPTIONS DEV=PNG; /* ------------------------------------------------------------------- ソートデータセット C:¥SAS¥Data¥SASData¥DEMOSFJ¥sales.sas7bdat ------------------------------------------------------------------- */ PROC SQL; CREATE VIEW WORK.SORTTempTableSorted AS SELECT T."購入金額"n FROM ECLIB000.sales as T ; QUIT; TITLE; TITLE1 "分布: 購入金額"; FOOTNOTE; ODS EXCLUDE EXTREMEOBS MODES MOMENTS QUANTILES; GOPTIONS htext=1 cells; SYMBOL v=SQUARE c=BLUE h=1 cells; PATTERN v=SOLID ; PROC UNIVARIATE DATA = WORK.SORTTempTableSorted CIBASIC(TYPE=TWOSIDED ALPHA=0.05) MU0=0 ; VAR "購入金額"n; HISTOGRAM "購入金額"n / NORMAL ( W=1 L=1 COLOR=YELLOW MU=EST SIGMA=EST) CFRAME=BLACK CAXES=RED WAXIS=1 CBARLINE=BLACK CFILL=BLUE PFILL=SOLID ; ; /* ------------------------------------------------------------------- タスクコードの終わりです。 ------------------------------------------------------------------- */ RUN; QUIT; %_eg_conditional_dropds(WORK.SORTTempTableSorted); TITLE; FOOTNOTE; /* ------------------------------------------------------------------- デバイスの種類の設定を元に戻しています。 ------------------------------------------------------------------- */ OPTIONS DEV=ACTIVEX; /* --- "分布" のコードの終了 --- */ /* --- "データ結合とグループ作成" のコードの開始 --- */ %_eg_conditional_dropds(WORK.QUERY_FOR_SALES_SAS7BDAT); PROC SQL; CREATE TABLE WORK.QUERY_FOR_SALES_SAS7BDAT(label="QUERY_FOR_sales.sas7bdat") AS SELECT t1.'会員ID'n, t1.'購入年度'n, t1.'購入月'n, t1.'購入金額'n, /* UserGroup */ (CASE WHEN t1.'購入金額'n < 36000 THEN '1st' WHEN t1.'購入金額'n > 36000 THEN '2nd' END) LABEL="ユーザグループ" AS UserGroup, t1.'アイテムコード'n, t1.'決済方法'n, t1.'キャンペーンコード'n, t2.'性別'n, t2.'年齢'n, t2.'勤務業種'n, t2.'メルマガ'n, t2.'会員登録年度'n, t2.'最終購入年'n FROM EC100017.sales t1 INNER JOIN EC100019.customer t2 ON (t1.'会員ID'n = t2.'会員ID'n); QUIT; /* --- "データ結合とグループ作成" のコードの終了 --- */ /* --- "棒グラフ" のコードの開始 --- */ /* ------------------------------------------------------------------- SAS タスクにより生成されたコード 作成日: 2014年6月26日 14:47:24 タスク: 棒グラフ 入力データ: Local:WORK.QUERY_FOR_SALES_SAS7BDAT サーバー: Local ------------------------------------------------------------------- */ %_eg_conditional_dropds(WORK.SORTTempTableSorted); /* ------------------------------------------------------------------- ソートデータセット Local:WORK.QUERY_FOR_SALES_SAS7BDAT ------------------------------------------------------------------- */ PROC SQL; CREATE VIEW WORK.SORTTempTableSorted AS SELECT T.UserGroup FROM WORK.QUERY_FOR_SALES_SAS7BDAT as T ; QUIT; Axis1 STYLE=1 WIDTH=1 MINOR= (NUMBER=1 ) ; Axis2 STYLE=1 WIDTH=1 ; TITLE; TITLE1 "ユーザグループ【度数】"; FOOTNOTE; FOOTNOTE1 "ユーザの母数をカウントします"; PROC GCHART DATA=WORK.SORTTempTableSorted ; VBAR UserGroup / CLIPREF FRAME TYPE=FREQ OUTSIDE=PCT LEGEND=LEGEND1 COUTLINE=BLACK RAXIS=AXIS1 MAXIS=AXIS2 PATTERNID=MIDPOINT LREF=1 CREF=BLACK AUTOREF ; /* ------------------------------------------------------------------- タスクコードの終わりです。 ------------------------------------------------------------------- */ RUN; QUIT; %_eg_conditional_dropds(WORK.SORTTempTableSorted); TITLE; FOOTNOTE; /* --- "棒グラフ" のコードの終了 --- */ /* --- "棒グラフ1" のコードの開始 --- */ /* ------------------------------------------------------------------- SAS タスクにより生成されたコード 作成日: 2014年6月26日 14:47:24 タスク: 棒グラフ1 入力データ: Local:WORK.QUERY_FOR_SALES_SAS7BDAT サーバー: Local ------------------------------------------------------------------- */ %_eg_conditional_dropds(WORK.SORTTempTableSorted); /* ------------------------------------------------------------------- ソートデータセット Local:WORK.QUERY_FOR_SALES_SAS7BDAT ------------------------------------------------------------------- */ PROC SQL; CREATE VIEW WORK.SORTTempTableSorted AS SELECT T.UserGroup, T."購入金額"n FROM WORK.QUERY_FOR_SALES_SAS7BDAT as T ; QUIT; Axis1 STYLE=1 WIDTH=1 MINOR= (NUMBER=1 ) ; Axis2 STYLE=1 WIDTH=1 ; TITLE; TITLE1 "ユーザグループ【金額】"; FOOTNOTE; FOOTNOTE1 "ユーザの金額で比較します"; PROC GCHART DATA=WORK.SORTTempTableSorted ; VBAR UserGroup / SUMVAR="購入金額"n CLIPREF FRAME TYPE=SUM OUTSIDE=PCT LEGEND=LEGEND1 COUTLINE=BLACK RAXIS=AXIS1 MAXIS=AXIS2 PATTERNID=MIDPOINT LREF=1 CREF=BLACK AUTOREF ; /* ------------------------------------------------------------------- タスクコードの終わりです。 ------------------------------------------------------------------- */ RUN; QUIT; %_eg_conditional_dropds(WORK.SORTTempTableSorted); TITLE; FOOTNOTE; /* --- "棒グラフ1" のコードの終了 --- */ /* --- "棒グラフ11" のコードの開始 --- */ %LET _CLIENTTASKFILTER = UserGroup = '2nd'; /* ------------------------------------------------------------------- SAS タスクにより生成されたコード 作成日: 2014年6月26日 14:47:24 タスク: 棒グラフ11 入力データ: Local:WORK.QUERY_FOR_SALES_SAS7BDAT サーバー: Local ------------------------------------------------------------------- */ %_eg_conditional_dropds(WORK.SORTTempTableSorted); /* ------------------------------------------------------------------- ソートデータセット Local:WORK.QUERY_FOR_SALES_SAS7BDAT ------------------------------------------------------------------- */ PROC SQL; CREATE VIEW WORK.SORTTempTableSorted AS SELECT T."勤務業種"n, T."年齢"n, T."購入金額"n FROM WORK.QUERY_FOR_SALES_SAS7BDAT as T WHERE UserGroup = '2nd' ; QUIT; Legend1 FRAME POSITION = (MIDDLE RIGHT OUTSIDE) ; Axis1 STYLE=1 WIDTH=1 MINOR= (NUMBER=1 ) ; Axis2 STYLE=1 WIDTH=1 ; TITLE; TITLE1 "2ndユーザ属性調査"; FOOTNOTE; FOOTNOTE1 "2ndユーザの特徴を表現します"; PROC GCHART DATA=WORK.SORTTempTableSorted ; VBAR "勤務業種"n / SUMVAR="購入金額"n SUBGROUP="年齢"n CLIPREF FRAME TYPE=SUM OUTSIDE=PCT LEGEND=LEGEND1 COUTLINE=BLACK RAXIS=AXIS1 MAXIS=AXIS2 LREF=1 CREF=BLACK AUTOREF ; /* ------------------------------------------------------------------- タスクコードの終わりです。 ------------------------------------------------------------------- */ RUN; QUIT; %_eg_conditional_dropds(WORK.SORTTempTableSorted); TITLE; FOOTNOTE; %SYMDEL _CLIENTTASKFILTER; /* --- "棒グラフ11" のコードの終了 --- */ /* --- "データ結合とプロンプトの作成" のコードの開始 --- */ %_eg_conditional_dropds(WORK.QUERY_FOR_SALES_SAS7BDAT_0000); PROC SQL; CREATE TABLE WORK.QUERY_FOR_SALES_SAS7BDAT_0000(label="QUERY_FOR_SALES_SAS7BDAT") AS SELECT t1.'会員ID'n, t1.'購入年度'n, t1.'購入月'n, t1.'購入金額'n, t1.UserGroup, t2.'キャンペーン名'n, t3.'カテゴリ'n, t1.'決済方法'n, t1.'性別'n, t1.'年齢'n, t1.'勤務業種'n, t1.'メルマガ'n, t1.'会員登録年度'n, t1.'最終購入年'n FROM WORK.QUERY_FOR_SALES_SAS7BDAT t1, EC100021.campaign t2, EC100023.item t3 WHERE (t1.'キャンペーンコード'n = t2.'キャンペーンコード'n AND t1.'アイテムコード'n = t3.'アイテムコード'n) AND (%_eg_WhereParam( t1.'勤務業種'n, Industry, EQ, TYPE=S, IS_EXPLICIT=0 ) AND %_eg_WhereParam( t1.UserGroup, Group, EQ, TYPE=S, IS_EXPLICIT=0 ) AND %_eg_WhereParam( t1.'年齢'n, age, IN, TYPE=N, IS_EXPLICIT=0 )); QUIT; /* --- "データ結合とプロンプトの作成" のコードの終了 --- */ /* --- "タイルグラフ" のコードの開始 --- */ /* ------------------------------------------------------------------- SAS タスクにより生成されたコード 作成日: 2014年6月26日 14:47:24 タスク: タイルグラフ 入力データ: WORK.QUERY_FOR_SALES_SAS7BDAT_0000 サーバー: Local ------------------------------------------------------------------- */ %LET _EG_ACTIVEX_DEV=; DATA _NULL_; IF EOF NE 1 THEN DO; SET SASHELP.VOPTION( WHERE=(OPTNAME="DEVICE")) END=EOF; IF NOT ( SETTING IN ("ACTIVEX", "JAVA", "ACTXIMG", "JAVAIMG") ) THEN CALL SYMPUT("_EG_ACTIVEX_DEV", " OPTIONS DEVICE=ACTIVEX;"); END; STOP; RUN; &_EG_ACTIVEX_DEV TITLE1 "タイルグラフ"; proc gtile data=WORK.QUERY_FOR_SALES_SAS7BDAT_0000; FLOW '購入金額'n tileby=( 'カテゴリ'n) / ; run; quit; /* ------------------------------------------------------------------- タスクコードの終わりです。 ------------------------------------------------------------------- */ RUN; QUIT; TITLE; FOOTNOTE; RUN; /* --- "タイルグラフ" のコードの終了 --- */ /* --- "円グラフ" のコードの開始 --- */ /* ------------------------------------------------------------------- SAS タスクにより生成されたコード 作成日: 2014年6月26日 14:47:24 タスク: 円グラフ 入力データ: Local:WORK.QUERY_FOR_SALES_SAS7BDAT_0000 サーバー: Local ------------------------------------------------------------------- */ %_eg_conditional_dropds(WORK.SORTTempTableSorted); /* ------------------------------------------------------------------- ソートデータセット Local:WORK.QUERY_FOR_SALES_SAS7BDAT_0000 ------------------------------------------------------------------- */ PROC SQL; CREATE VIEW WORK.SORTTempTableSorted AS SELECT T."カテゴリ"n, T."購入金額"n FROM WORK.QUERY_FOR_SALES_SAS7BDAT_0000 as T ; QUIT; Legend1 FRAME POSITION = (BOTTOM CENTER OUTSIDE) ; TITLE; TITLE1 "円グラフ"; FOOTNOTE; PROC GCHART DATA =WORK.SORTTempTableSorted ; PIE "カテゴリ"n / SUMVAR="購入金額"n TYPE=SUM LEGEND=LEGEND1 SLICE=OUTSIDE PERCENT=OUTSIDE VALUE=OUTSIDE OTHER=4 OTHERLABEL="その他" COUTLINE=BLACK NOHEADING ; /* ------------------------------------------------------------------- タスクコードの終わりです。 ------------------------------------------------------------------- */ RUN; QUIT; %_eg_conditional_dropds(WORK.SORTTempTableSorted); TITLE; FOOTNOTE; /* --- "円グラフ" のコードの終了 --- */ /* --- "オファリング対象1st" のコードの開始 --- */ %_eg_conditional_dropds(WORK.QUERY_FOR_SALES_SAS7BDAT_00_0000); PROC SQL; CREATE TABLE WORK.QUERY_FOR_SALES_SAS7BDAT_00_0000(label="Query") AS SELECT t1.'会員ID'n, t1.'購入年度'n, t1.'購入月'n, t1.'購入金額'n, t1.UserGroup, t2.'キャンペーン名'n, t3.'カテゴリ'n, t1.'決済方法'n, t1.'性別'n, t1.'年齢'n, t1.'勤務業種'n, t1.'メルマガ'n, t1.'会員登録年度'n, t1.'最終購入年'n FROM WORK.QUERY_FOR_SALES_SAS7BDAT t1, EC100024.campaign t2, EC100025.item t3 WHERE (t1.'キャンペーンコード'n = t2.'キャンペーンコード'n AND t1.'アイテムコード'n = t3.'アイテムコード'n) AND (%_eg_WhereParam( t1.'勤務業種'n, Industry, EQ, TYPE=S, IS_EXPLICIT=0 ) AND %_eg_WhereParam( t1.UserGroup, Group, EQ, TYPE=S, IS_EXPLICIT=0 ) AND %_eg_WhereParam( t1.'年齢'n, age, IN, TYPE=N, IS_EXPLICIT=0 )); QUIT; /* --- "オファリング対象1st" のコードの終了 --- */

/* ------------------------------------------------------------------- ソートデータセット C:¥SAS¥Data¥SASData¥DEMOSFJ¥sales.sas7bdat ------------------------------------------------------------------- */ PROC SQL; CREATE VIEW WORK.SORTTempTableSorted AS SELECT T."購入金額"n FROM ECLIB000.sales as T ; QUIT; TITLE; TITLE1 "分布: 購入金額"; FOOTNOTE; ODS EXCLUDE EXTREMEOBS MODES MOMENTS QUANTILES; GOPTIONS htext=1 cells; SYMBOL v=SQUARE c=BLUE h=1 cells; PATTERN v=SOLID ; PROC UNIVARIATE DATA = WORK.SORTTempTableSorted CIBASIC(TYPE=TWOSIDED ALPHA=0.05) MU0=0 ; VAR "購入金額"n; HISTOGRAM "購入金額"n / NORMAL ( W=1 L=1 COLOR=YELLOW MU=EST SIGMA=EST) CFRAME=BLACK CAXES=RED WAXIS=1 CBARLINE=BLACK CFILL=BLUE PFILL=SOLID ; ; /* ------------------------------------------------------------------- タスクコードの終わりです。 ------------------------------------------------------------------- */ RUN; QUIT;

【プログラムがわからない方】 過程がわからない 覚える意欲低下 身近に教わる環境

【プログラムを教える方】 説明が難しい 業務負担の増大 属人化問題

Page 5: SASを教える・SASを始める 新しいSASの操作方法 SAS® … · 2018-07-05 · 要旨: 【sasを教える】【sasを始める】方に新しいsasの操作方法をご案内します。

データ抽出 データ加工 分析タスク

簡単操作 プロセスフロー自動作成

共有・再利用

データ確認 分析結果確認

SAS® Enterprise Guide

Page 6: SASを教える・SASを始める 新しいSASの操作方法 SAS® … · 2018-07-05 · 要旨: 【sasを教える】【sasを始める】方に新しいsasの操作方法をご案内します。

データ抽出 データ加工 分析タスク

Page 7: SASを教える・SASを始める 新しいSASの操作方法 SAS® … · 2018-07-05 · 要旨: 【sasを教える】【sasを始める】方に新しいsasの操作方法をご案内します。

簡単操作

マウス操作

ドラッグ&ドロップ ポイント&クリック

Page 8: SASを教える・SASを始める 新しいSASの操作方法 SAS® … · 2018-07-05 · 要旨: 【sasを教える】【sasを始める】方に新しいsasの操作方法をご案内します。

テーブルの結合(横結合) 計算列の作成

日付 ・・

2008 ・・

2008 ・・

日付 ・・

2009 ・・

2009 ・・

日付 ・・

2008 ・・

2008 ・・

2009 ・・

2009 ・・

テーブルの追加(縦結合)

様々なデータ加工メニューを提供

Page 9: SASを教える・SASを始める 新しいSASの操作方法 SAS® … · 2018-07-05 · 要旨: 【sasを教える】【sasを始める】方に新しいsasの操作方法をご案内します。

集計から回帰分析・多変量解析など統計解析を、簡単なマウス操作で実行

Page 10: SASを教える・SASを始める 新しいSASの操作方法 SAS® … · 2018-07-05 · 要旨: 【sasを教える】【sasを始める】方に新しいsasの操作方法をご案内します。

グラフ・チャート・表作成の簡単なマウス操作

Page 11: SASを教える・SASを始める 新しいSASの操作方法 SAS® … · 2018-07-05 · 要旨: 【sasを教える】【sasを始める】方に新しいsasの操作方法をご案内します。

プロセスフロー自動生成 共有・再利用

1. 直観的なマウス操作で実行したプロセスをフロー図として自動生成

2. プロセスの編集・条件変更によるプロセス分岐へ対応

3. 再利用・共有へ対応

Page 12: SASを教える・SASを始める 新しいSASの操作方法 SAS® … · 2018-07-05 · 要旨: 【sasを教える】【sasを始める】方に新しいsasの操作方法をご案内します。

プロセスフローをスケジュール設定でバッチ実行が可能

Page 13: SASを教える・SASを始める 新しいSASの操作方法 SAS® … · 2018-07-05 · 要旨: 【sasを教える】【sasを始める】方に新しいsasの操作方法をご案内します。

データ確認

入力データ

ログ

SASコード

Page 14: SASを教える・SASを始める 新しいSASの操作方法 SAS® … · 2018-07-05 · 要旨: 【sasを教える】【sasを始める】方に新しいsasの操作方法をご案内します。

SAS言語と連携

PROC検索

構文解説

オプション一覧

データセット 候補一覧

コードの整頓

SASプロシジャおよび解説、データセット名の候補情報が自動的に表示されコーディングを支援する

Page 15: SASを教える・SASを始める 新しいSASの操作方法 SAS® … · 2018-07-05 · 要旨: 【sasを教える】【sasを始める】方に新しいsasの操作方法をご案内します。

SASⓇ ENTERPRISE GUIDE

CSV/Excel取り込み

分析 データ

標準偏差

t検定

ロジスティック 回帰

多変量 解析

横結合

SAS データ

SAS データ

相関分析

etc…

レポート作成 レポート

変換済 データ

CSV/Excel

縦結合

変数作成

関数

分割

SASデータ

データ抽出 データ加工 分析 レポート 提供

出力

Page 16: SASを教える・SASを始める 新しいSASの操作方法 SAS® … · 2018-07-05 · 要旨: 【sasを教える】【sasを始める】方に新しいsasの操作方法をご案内します。

「受注データ」(データ名:TRANSACTION、外部キー:「商品小分類コード」、「ユーザーID」)

「顧客マスタ」(データ名:CUSTOMER、主キー:「ユーザーID」)

「商品マスタ」(データ名:PRODUCT、主キー:「商品小分類コード」)

デモ内容 : SAS Enterprise Guide基本機能

データ結合・要約機能・列の分割・変数作成・ロジスティック回帰・プロンプト・エクスポート

利用データ

「受注データ」「顧客マスタ」「製品マスタ」

Page 17: SASを教える・SASを始める 新しいSASの操作方法 SAS® … · 2018-07-05 · 要旨: 【sasを教える】【sasを始める】方に新しいsasの操作方法をご案内します。

① ② ③

④ ⑤ ⑥ ⑦

① 「受注データ」「顧客マスタ」「製品マスタ」を結合 (データ加工)

② 縦持ちの商品中分類データを横持ちへ転置 (データ加工)

③ 2値の値を持つ、紳士服購入フラグを作成 (データ加工)

④ 回帰分析で、商品購入に影響する属性を特定し、顧客毎の購入確率を算出 (分析)

⑤ 紳士服購入確率をパーセントへ変更 (データ加工)

⑥ プロンプトの設定で、紳士服購入確率と性別の条件設定 (データ加工)

⑦ ターゲットリストをExcelへエクスポート

分析プロセスフローの完成図

Page 18: SASを教える・SASを始める 新しいSASの操作方法 SAS® … · 2018-07-05 · 要旨: 【sasを教える】【sasを始める】方に新しいsasの操作方法をご案内します。

データ選択 分析用に加工 探索&分析 結果

Stored Processとして配布

(Office Analytics) 結果の共有

SAS Enterprise Guideで生成されたプロセスフローをパッキングし、 オフィスソフトからセルフサービス型の配信と共有が可能

※SAS Office Analyticsライセンスが必要

Page 19: SASを教える・SASを始める 新しいSASの操作方法 SAS® … · 2018-07-05 · 要旨: 【sasを教える】【sasを始める】方に新しいsasの操作方法をご案内します。

SAS® Office Analytics

1. Microsoft Officeからあらゆるデータへの直接アクセス、分析が可能

2. カスタム処理(*ストアドプロセス)の実行により複雑な処理を実現可能

3. Officeの機能と連携により、レポーティング業務を自動化・効率化

Page 20: SASを教える・SASを始める 新しいSASの操作方法 SAS® … · 2018-07-05 · 要旨: 【sasを教える】【sasを始める】方に新しいsasの操作方法をご案内します。

『The Power to Know®』