要旨 : データステップ及び SGPLOT プロシジャにおける POLYGON/TEXT ステートメントを利用した SAS プログラムステップフローチャートを生成する SAS プログラムを紹介する キーワード :SGPLOT, フローチャート, 可視化 2

Similar documents
Microsoft Word - sample_adv-programming.docx

Proc luaを初めて使ってみた -SASでの処理を条件に応じて変える- 淺井友紀 ( エイツーヘルスケア株式会社 ) I tried PROC LUA for the first time Tomoki Asai A2 Healthcare Corporation


帳票 Mockup からの RTF 用テンプレート SAS プログラム自動作成ツール Taiho TLF Automated Tool の紹介 伊藤衡気 1 栗矢芳之 2 銭本敦 2 ( 株式会社タクミインフォメーションテクノロジー 1 大鵬薬品工業株式会社 2 )

ODS GRAPHICS ON; ODS GRAPHICS ON; PROC TTEST DATA=SASHELP.CLASS SIDE=2 DIST=NORMAL H0=58 PLOTS(ONLY SHOWH0)=(SUMMARY); VAR HEIGHT;

データ構造の作成 一時 SAS データセットと永久 SAS データセットの作成 テキストファイルから SAS データセットを作成するための DATA ステップの使用例 : Data NewData; Infile "path.rawdata"; Input <pointer-control> var

Microsoft PowerPoint - 【魚住】 発表原稿【Web公開用】.ppt [互換モード]

sinfI2005_VBA.doc

クリッピング領域

untitled

スライド 1

ソフトウェア基礎 Ⅰ Report#2 提出日 : 2009 年 8 月 11 日 所属 : 工学部情報工学科 学籍番号 : K 氏名 : 當銘孔太

第 1 章 条件分岐 この章では 条件に応じて処理を分岐する方法について説明します 1. CASE 式で複雑な条件分岐を実現 2. 関数を使用した条件分岐 3. MERGE 文による条件に応じた DML の実行

Pinnacle 21: ADaM データセットや Define.xml の CDISC 準拠状況をチェックするツール 本発表で言及している Pinnacle: Enterprise version ( 有償版 ) Community version ( 無償版 ) 本発表で

はじめに コースの概要と目的 Oracle をより効率的に使用するための SQL のチューニング方法について説明します また 索引の有無 SQL の 記述方法がパフォーマンスにどのように影響するのかを実習を通して理解します 受講対象者 アプリケーション開発者 / データベース管理者の方 前提条件 S

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

PowerPoint プレゼンテーション

はじめに コースの概要と目的条件分岐の方法や複雑な集計の手法など SQL のコーディングの幅を広げるためのテクニックについて説明します また パフォーマンスを考慮した記述方法や正しい結果を取得するための記述方法などについても あわせて説明します 本コースでは 実践的な SQL の記述手法を広く浅く紹

NLMIXED プロシジャを用いた生存時間解析 伊藤要二アストラゼネカ株式会社臨床統計 プログラミング グループグルプ Survival analysis using PROC NLMIXED Yohji Itoh Clinical Statistics & Programming Group, A

プレポスト【解説】

スライド 1

XMP structure: 1

untitled

要旨 : SAS9.4 より Output Derivery System( 以下 ODS) に追加された Report Writing Interface( 以下 RWI) を使用して HTML 形式のレポート作成の実用性と可能性について検討する なお HTML 出力には タグの綺麗さから ODS

デジタル表現論・第4回

このルールをそのまま正規表現として書くと 下記のようになります ^A[0-9]{2}00[0-9]{3}([0-9]{2})?$ ちょっと難しく見えるかもしれませんが 下記のような対応になっています 最初 固定 年度 固定 通番 ( 枝番 ) 最後 ルール "A" 数字 2 桁 0 を 2 桁 数字

第 5 章 結合 結合のパフォーマンスに影響を与える結合の種類と 表の結合順序について内部動作を交えて 説明します 1. 結合処理のチューニング概要 2. 結合の種類 3. 結合順序 4. 結合処理のチューニングポイント 5. 結合関連のヒント

Taro-Basicの基礎・条件分岐(公

Exam : A JPN Title : SAS Base Programming for SAS 9 Vendor : SASInstitute Version : DEMO Get Latest & Valid A JPN Exam's Question and Answ

スライド 1

情報処理Ⅰ

第 2 章 PL/SQL の基本記述 この章では PL/SQL プログラムの基本的な記述方法について説明します 1. 宣言部 2. 実行部 3. 例外処理部

Gray [6] cross tabulation CUBE, ROLL UP Johnson [7] pivoting SQL 3. SuperSQL SuperSQL SuperSQL SQL [1] [2] SQL SELECT GENERATE <media> <TFE> GENER- AT


情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

文字列操作と正規表現

第 2 章 問合せの基本操作 この章では データベースから情報を検索する際に使用する SELECT コマンド および SELECT コマンドと 同時に使用する句について説明します 1. 問合せとは 2. 基本的な問合せ 3. 列の別名 4. 重複行を一意にする 5. 検索行の絞込み 6. 文字パター

PowerPoint プレゼンテーション

内容 Visual Studio サーバーエクスプローラで学ぶ SQL とデータベース操作... 1 サーバーエクスプローラ... 4 データ接続... 4 データベース操作のサブメニューコンテキスト... 5 データベースのプロパティ... 6 SQL Server... 6 Microsoft

PowerPoint プレゼンテーション

Taro-cshプログラミングの応用.jt

EnSight 10.1の新機能

コンピュータグラフィックス基礎              No

情報資源組織演習B:

Case 0 sqlcmdi.parameters("?tencode").value = Iidata(0) sqlcmdi.parameters("?tenname").value = Iidata(1) 内容を追加します sqlcmdi.executenonquery() Case Else

スライド 0


PowerPoint Presentation

Sequel のすすめ 私が SQL を嫌いな理由 とみたまさひろ RubyHiroba Sequel のすすめ - 私が SQL を嫌いな理由 Powered by Rabbit 2.0.7

スライド 1

Rの基本操作

スライド 1

正規表現応用

ex04_2012.ppt

バスケットボール

文字列検索ユーティリティ使用の手引き

Basic descriptive statistics

目次 更新履歴... 1 はじめに... 3 レコードセット?... 3 準備... 5 SQL でデータを取得する... 6 データのループ処理... 7 列の値を取得する... 7 対象行を変更する (MoveFirst, MoveNext, MovePrevious, MoveLast)...

スライド 1

y = x 4 y = x 8 3 y = x 4 y = x 3. 4 f(x) = x y = f(x) 4 x =,, 3, 4, 5 5 f(x) f() = f() = 3 f(3) = 3 4 f(4) = 4 *3 S S = f() + f() + f(3) + f(4) () *4

Microsoft Word - DF-Salford解説09.doc

EGS4に対応した粒子軌跡と 計算体系の3次元表示ソフト

With sqlda sqlda に SelectCommand を追加.SelectCommand = New MySqlCommand() With.SelectCommand.CommandType = CommandType.Text.CommandText = "select * from

単語の比較とスペルチェック COMPARA Word のテキスト内にある単語を抽出し 異なり語のリストを作成するプログラムです また Word のテキスト内の単語 ( または単語リスト ) を 先に作成した単語リストと照合して その異同を確かめます フォーム 単語リスト単語集計同語検索異語検索同語リ

MS-ExcelVBA 基礎 (Visual Basic for Application)

DATA test; /** **/ INPUT score DATALINES; ; PROC MEANS DATA=test; /** DATA= **/ VAR sc

HABOC manual

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

Microsoft PowerPoint - SAS2012_ZHANG_0629.ppt [互換モード]

technews2012autumn


Visual Studio2008 C# で JAN13 バーコードイメージを作成 xbase 言語をご利用の現場でバーコードの出力が必要なことが多々あります xbase 言語製品によっては 標準でバーコード描画機能が付加されているものもあるようで す C# では バーコードフォントを利用したりバー

コードテンプレートフレームワーク 機能ガイド 基礎編

Microsoft PowerPoint - vp演習課題


Slide 1


kiso2-03.key

Oracle Database Connect 2017 JPOUG

日本語論文タイトル

API 連携方式 外部 DLL の呼び出し宣言 外部 DLL の呼び出し宣言のサンプルコード (Microsoft Visual C#.NET の場合 ) プログラムコードの先頭で using System.Runtime.InteropServices; が必要 クラスの内部に以下のような外部 D

プレポスト【問題】

Python によるジオプロセシング スクリプト入門

分析のステップ Step 1: Y( 目的変数 ) に対する値の順序を確認 Step 2: モデルのあてはめ を実行 適切なモデルの指定 Step 3: オプションを指定し オッズ比とその信頼区間を表示 以下 このステップに沿って JMP の操作をご説明します Step 1: Y( 目的変数 ) の

Microsoft Word - Android_SQLite講座_画面800×1280

DATA Sample1 /**/ INPUT Price /* */ DATALINES

Taro-ファイル処理(公開版).jtd

コンピュータの構成

前ページからの続き // テキストボックス02 id 属性で取得 // id 属性で取得する場合は一意に決まるので 何番目かの指定は不要 var textbox02elem = document.getelementbyid("text_box02_id"); if ("001" == statee

PowerPoint プレゼンテーション

基礎プログラミング2015

Microsoft PowerPoint L07-Imperative Programming Languages-4-students ( )

Microsoft PowerPoint - アルデIII 10回目12月09日

情報処理演習 B8クラス

1 SQL Server SQL Oracle SQL SQL* Plus PL/SQL 2 SQL Server SQL Server SQL Oracle SQL SQL*Plus SQL Server GUI 1-1 osql 1-1 Transact- SQL SELECTFROM 058


slide5.pptx

Python によるジオプロセシング スクリプト入門

Transcription:

SAS プログラムの可視化 - SAS プログラムステップフローチャート生成プログラムの紹介 - 福田裕章 1 ( 1 MSD 株式会社 ) Visualization of SAS programs Hiroaki Fukuda MSD K.K.

要旨 : データステップ及び SGPLOT プロシジャにおける POLYGON/TEXT ステートメントを利用した SAS プログラムステップフローチャートを生成する SAS プログラムを紹介する キーワード :SGPLOT, フローチャート, 可視化 2

背景 一般的なSASプログラムデータ加工 Proc Step データ加工 Proc Step... Proc Lua Data Step 様々なデータハンドリング技術 Proc DS2 Proc SQL フローの可視化が望ましい Hash Object 主流は基本的な Data Step や SQL プロシジャ ハンドリングのために数多のステップが発生 プログラムの把握に一苦労 フローチャート化 SAS プログラムを SAS プログラムで読み込み処理することで プログラムのステップフローチャートを作成する 3

SAS プログラムの判定 SAS プログラムによるプログラムステップ判定 SAS システムによる認識判定 例 : データステップの開始 data で始まっている data の直前が */ や ; で終了している data に続けて空白 + データセット名可能文字列が記載 などなど data, proc, set, merge などのステートメントに対する処理 コメントアウトやクオーテーションの処理 他にも様々な条件や記載方法 ( 改行等 ) の考慮 柔軟なテキスト操作やデータハンドリングが必要 4

プログラムの概要 SAS プログラムの読み込み コメント クオーテーションの処理 各種ステートメントの処理 Data Statement Proc Statement Set Statement Merge Statement SQL の処理 フローの分岐処理 Grouping 処理 = X 座標の決定 出力対象とする Text の選択 Y 座標の決定 アウトプット (Box/Arrow) 用の Dataset 作成 フローチャートの描画 Hash Object を利用 コード処理 分岐処理 ( 座標処理 ) アウトプット処理 Perl Regular Expression を利用 SGPLOT プロシジャを利用 5

テキスト操作の柔軟性 Perl Regular Expression Perl 正規表現の一部を SAS では関数として使用することが可能 パターンマッチにより 複雑な文字処理が可能 コメントアウトの処理 ( 一部 ) * rec2: プログラムコード格納変数 ; *** 先頭行や前行の最後が ; */ で終了している場合 ; rec2 = prxchange('s/(% *.*?; / *.*? * / (^ (?<=[^ w_ ))) *? *.*?;)//', -1, rec2); *** 改行により複数行にまたがっている場合 (/* */); if index(rec2, "/*") then do; asts1fn = 1; cont1fn = 1; rec2 = prxchange('s/ / *.*?//', 1, rec2); end; if index(rec2, "*/") then aste1fn = 1; if cont1fn = 1 then do; if aste1fn ^= 1 then rec2 = ""; else if aste1fn = 1 then do; rec2 = prxchange('s/(^.*? * /)//', 1, rec2); cont1fn = 0; end; end; <prxchange 関数 > (perl-regular-expression, times, source) * 引数の 1 番目が Perl 正規表現で特定の文字列パターンを置換 6

テキスト操作の柔軟性 Perl Regular Expression データステップの処理 ( 一部 : 条件分岐の提示のみ ) *** 以下のパターンに場合分けしてフラグを設定 ; ** 1.data statement が一行内で完結している場合 ; prxmatch('m/;( *)data( +)([ w_])+(.*);/i', rec2) ** 2. 前行の最後が ; */ で終了している場合; prxmatch('m/(; * /)$/', trim(pre_line2)) * 2-1. data で終了している場合( 継続 ); prxmatch('m/^data( *)$/i', trim(rec2)) * 2-2. data が存在する場合( 継続 ); prxmatch('m/^data( *)/i', rec2) * 2-3. 一行内で完結している場合 ; prxmatch('m/^data( +)([ w_])+(.*);/i', rec2) ** 3. 先頭行の場合 ; * 3-1. data で終了している場合( 継続 ); prxmatch('m/^data( *)$/i', trim(rec2)) * 3-2. data +データセット名等で終了している場合 ( 継続 ); prxmatch('m/^data( +)([ w_])+(.*)/i', rec2) * 3-3. 一行内で完結している場合 ; prxmatch('m/^data( +)([ w_])+(.*);/i', rec2) ** 4. その他の場合 ;... <prxmatch 関数 > (perl-regular-expression, source) * 引数の 1 番目が Perl 正規表現で 特定の文字列パターンに該当するかを判定 各パターンを考慮することで データステップの開始かどうかを判定 7

データハンドリングの柔軟性 Hash Object Y 座標の決定方向 X 座標の決定方向 1 2 3 (5) (4) (3) (2) A B C D O (9) (10) (7) Q P 4 (11) (8) X Y X 座標の決定 :1~4 最終ステップを含むグループを支点として決定 フローの上流から分岐を決定 Input/Output の関係から どの分岐先に属するか判定 ( 下プログラム ) Y 座標の決定 :(1)~(11) 下流 ( 最終ステップ ) から上流へ決定 分岐がある場合に複数の Input が同座標になるように決定 (1) E *** X 座標 (group) の決定 ; dcl hash itxtlst(); itxtlst.definekey('itext'); itxtlst.definedata('group'); itxtlst.definedone(); rc1 = itxtlst.check(key: text); ** Object itxtlistに出力テキスト (text) が存在するか確認 ; if rc1 = 0 then rc2 = itxtlst.find(key: text); ** itxtlistに存在すれば groupを取得 ; if group ^=. and (istepseq <= 2) then igroup = group; if igroup > &i. then rc3 = itxtlst.add(key: itext, data: igroup); ** Inputの情報をHashに格納 ; 8

フローチャートの作成 SAS9.4 から SGPLOT プロシジャに POLYGON/TEXT ステートメントが追加された ods graphics / imagemap=on; ** TIP オプション使用に必須 ; proc sgplot data=output noborder noautolegend; ** POLYGON ステートメントによるボックスの描画 ; polygon id=boxid x=box_x y=box_y; ** TEXT ステートメントによるテキストの描画 ; text x=text_x y=text_y text=text / Text を囲う枠線を定義するデータセット Box 由来の変数 : 頂点の座標を定義 textattrs=(size=5) splitchar='.' splitpolicy=splitalways tip = (code); ** SERIES ステートメントによる矢印の描画 ; 矢印を定義するデータセット Arrow 由来の変数 : 始点 終点の座標を定義 series x=arrow_x y=arrow_y / group=arrowid lineattrs=(color=black) arrowheadpos=end arrowheadscale=0.2; ** 軸の設定 ; xaxis display=none min=&xmin. max=&xmax. offsetmin=0 offsetmax=0; yaxis display=none min=&ymin. max=&ymax. offsetmin=0 offsetmax=0; run; 9

結果 1 単純なプログラムの場合 ** Create Data A; data A; set sashelp.class; run; proc sort data = A; by name age; run; ** Create Data B by SQL procedure; proc sql; create table B as select X.*, Y.pop from X inner join (select * from sashelp.demographics) as Y on X.COUNTRY = Y.ISONAME; quit; proc sort data = B out = B; by name age; run; ** Create Data C from A and B; data C; merge A (in = in1) B (in = in2); by name age; if in1 = in2; run; proc print data = C noobs; run; データ C 生成のコードを表示 TIP オプションにより指定した変数の値を表示できる 各ステップのコードを表示するように設定 10

結果 2 実際の解析データセット作成プログラムに適用した場合 例 :AE の解析データセット作成プログラム プロシジャの場合 枠の形状が になるように調整 まとめ 簡単な解析データセット作成プログラムならば フローチャートの作成が可能であった ステップが増大すると 作図の都合上 図形が小さくなるので 分割などを考慮する必要がある マクロ処理やMerge 処理が十分ではないので こうしたステップへの対応が今後の課題である 11

参考 SAS 9.4 コンポーネントオブジェクト : リファレンス第 2 版 http://www.sas.com/offices/asiapacific/japan/service/help/pdf/v94/lec ompobjref.pdf SAS 9.4 関数と CALL ルーチン : リファレンス第 4 版 http://www.sas.com/offices/asiapacific/japan/tools/download.html?url =http://support.sas.com/documentation/cdl_alternate/ja/lefunctionsre f/67960/pdf/default/lefunctionsref.pdf Steven First (2016) Innovative Performance Improvements Through Automated Flowcharts In SAS SAS Global Forum 2016. 12