技 巧 5: 避 免 除 以 0 的 運 算 在 做 除 的 運 算 時, 先 檢 查 除 數 的 數 值, 避 免 有 除 以 0 的 情 況 若 運 算 中 除 數 為 0,SAS 會 在 LOG 中 註 記 提 醒 並 將 運 算 結 果 設 定 為 遺 漏 值, 減 慢 程 式 的 執 行



Similar documents
中國醫藥大學生物統計中心 2013/April 提升 SAS 效率的小技巧 ( 一 ) 統計分析師嚴友君在使用 SAS 的時候, 效率的考量除了程式運行的時間, 還包括資料佔用的空間 暫存記憶體的使用量 程式的長度與易讀性等等 本主題將介紹一些初學者容易應用, 且在討論使用 SAS 處理 分析資料時

工银瑞信精选平衡混合型证券投资基金2008年度第2季度报告

大 綱 最 有 利 標 目 的 及 類 型 最 有 利 標 之 辦 理 方 式 準 用 最 有 利 標 取 最 有 利 標 精 神 最 有 利 標 之 類 型 及 其 相 關 規 定 適 用 最 有 利 標 準 用 最 有 利 標 及 取 最 有 利 標 精 神 作 業 程 序 及 實 務 分 析

Microsoft Word - p11.doc

2014年大学生村官考试公共基础知识:社会革命和社会改革

第 一 节 认 识 自 我 的 意 义 一 个 人 只 有 认 识 自 我, 才 能 够 正 确 地 认 识 到 自 己 的 优 劣 势, 找 出 自 己 的 职 业 亮 点, 为 自 己 的 顺 利 求 职 推 波 助 澜 ; 一 个 人 只 有 认 识 自 我, 才 能 在 求 职 中 保 持

邻居啊 第二天 对门却悄无声息了 莫非昨夜的吵闹 仅是个幻觉 夜幕拉下时 寒风又吱溜溜地叫个不停 老婆 睡下后 我这只夜猫子 继续兴致勃勃地跟着福尔 摩斯去探案 白天的喧嚣退去了 周围格外安静 正 是读书的好时候 突然 响起了钟摆声 哒 哒 哒 节奏匀称 不疾不徐 声响却愈来愈大 格外突兀 了 原来

<4D F736F F D BAC520CAD7B6BCCAA6B7B6B4F3D1A C4EAD7A8D2B5BCBCCAF5D6B0CEF1C6C0C6B8B9A4D7F7D2E2BCFB2E646F63>

其 他 方 面 也 可 以 采 用 同 样 的 方 式, 这 样 又 可 以 锻 炼 除 语 文 方 面 的 其 他 能 力 了 而 英 语 方 面, 我 认 为 配 合 英 语 专 业 举 办 英 语 演 讲 比 赛 就 很 不 错 这 样 开 展 一 系 列 的 创 新 活 动, 锻 炼 多 方

第 六 条 办 法 第 五 条 ( 三 ) 协 会 考 评, 考 评 指 考 核 评 价 第 七 条 办 法 第 六 条 职 业 操 守 包 括 的 内 容 : 个 人 诚 信 不 做 假 账 不 偷 漏 税 不 贪 污 盗 窃 等 第 八 条 企 业 财 务 管 理 人 才 评 价 实 行 五 星

他 随 身 带 有 二 三 十 张 古 方, 白 天 卖 药, 夜 晚 将 药 材 精 细 研 末, 按 方 配 制 对 于 病 人 服 药 后 反 应, 特 别 留 心 发 现 问 题, 就 近 向 老 医 生 老 药 贩 虚 心 求 教, 千 方 百 提 高 药 效 同 时 对 于 春 夏 秋

6寸PDF生成工具

Microsoft Word - 送報伕2.doc

申论写作套路万能模板

untitled

Microsoft Word - 三方协议书与接收函的相关说明学生版.doc

SAS系統簡介

tech_atmn_h1h4_E

1 行 业 发 展 不 平 衡 我 国 房 地 产 中 介 服 务 业 起 步 较 晚, 专 业 分 工 程 度 和 国 外 发 达 国 家 相 比 还 有 很 大 差 距 房 地 产 中 介 服 务 行 业 的 发 展 水 平 与 房 地 产 开 发 行 业 的 市 场 化 水 平 密 切 相 关

汇集全球21位医生的经验和智慧,总结出最实用的专业建议,这些都是最值得你牢记的健康提醒

Microsoft Word - 先玉335 copy.doc

Microsoft PowerPoint - Lecture7II.ppt

箫.doc

給 訪 問 員 的 話 親 愛 的 訪 問 員 您 好 : 首 先 歡 迎 您 參 加 本 次 原 住 民 族 就 業 狀 況 家 戶 訪 問 工 作 調 查 訪 問 工 作 就 好 比 自 然 科 學 領 域 裡 的 實 驗 工 作 一 樣, 是 經 驗 研 究 裡 最 基 礎 的 工 作, 對

!

!

Microsoft Word - 變形記

Microsoft Word - [术数]《八卦象数与疾病预测》黄鉴.doc

プリント

第 一 章 : 從 中 共 解 放 軍 投 奔 藏 軍 棄 家 從 軍 我 原 名 姜 華 亭, 藏 名 羅 桑 扎 西, 家 在 中 國 山 東 省 萊 陽 縣 九 區 孟 格 莊 村, 父 親 叫 姜 昆, 母 親 叫 李 秀 芳 家 中 以 務 農 為 業 解 放 前 後, 父 親 曾 在 三


Microsoft Word - 成长的痕迹散文集.docx

Microsoft Word - 席慕容散文集.doc

gongGaoMingCheng

<4D F736F F D20D6D0B9FABDDAC8D5CEC4BBAF2DB5BECCEF2E646F63>

七 以 自 然 風 光 為 紋 飾 第 六 章 中 國 歷 代 民 間 藏 瓷 鑒 定 術 語 第 七 章 中 國 古 瓷 文 獻 選 一 窯 器 說 ( 清 ) 程 哲 著 二 景 德 鎮 陶 歌 序 言 我 與 春 恩 先 生 相 識 經 年, 且 為 同 好, 瓷 道 摯 友 春 恩 為 人

gongGaoMingCheng

(Microsoft Word - \245\274\244\300\246\250\301Z\260\252\247C13.doc)

科学计算的语言-FORTRAN95

892213E006146

讀書方法秘笈

Transcription:

提 升 SAS 效 率 的 小 技 巧 ( 二 ) 統 計 分 析 師 嚴 友 君 在 使 用 SAS 的 時 候, 效 率 的 考 量 除 了 程 式 運 行 的 時 間, 還 包 括 資 料 佔 用 的 空 間 暫 存 記 憶 體 的 使 用 量 程 式 的 長 度 與 易 讀 性 等 等 以 下 介 紹 一 些 初 學 者 容 易 應 用, 且 在 討 論 使 用 SAS 處 理 分 析 資 料 時 常 被 提 到 的 幾 個 小 技 巧 上 篇 ( 一 ) 介 紹 了 一 些 在 DATA step 部 分 可 應 用 的 技 巧, 本 篇 ( 二 ) 將 以 PROC step 的 部 分 為 主 承 上 篇 ( 一 ), 以 下 範 例 將 使 用 上 篇 技 巧 1 中 模 擬 的 資 料 檔 demo 資 料 檔 demo 的 資 料 型 式 如 下 : 1

技 巧 5: 避 免 除 以 0 的 運 算 在 做 除 的 運 算 時, 先 檢 查 除 數 的 數 值, 避 免 有 除 以 0 的 情 況 若 運 算 中 除 數 為 0,SAS 會 在 LOG 中 註 記 提 醒 並 將 運 算 結 果 設 定 為 遺 漏 值, 減 慢 程 式 的 執 行 效 率 範 例 5: 新 增 一 個 變 數 y5=x1/x3 程 式 1: 效 率 較 差 DATA slow; SET demo; y5 = x1/x3; PROC MEANS DATA=slow MEAN NMISS; VAR y5; NOTE: 在 line 74 column 12 偵 測 到 除 數 為 零 i=484 x1=78 x2=-19.00859113 x3=0 x4=4 x5=1 y5=. _ERROR_=1 _N_=484 NOTE: 在 line 74 column 12 偵 測 到 除 數 為 零 i=554 x1=18 x2=29.710669506 x3=0 x4=7 x5=1 y5=. _ERROR_=1 _N_=554 程 式 2: 效 率 較 佳 DATA fast; SET demo; IF x3 ne 0 THEN y5 = x1/x3; ELSE y5 =.; PROC MEANS DATA=fast MEAN NMISS; VAR y5; NOTE: There were 20000000 observations read NOTE: The data set WORK.FAST has 20000000 observations and 7 NOTE: DATA statement used (Total process 1:29.84 10.42 seconds WARNING: 已 達 到 ERRORS= 選 項 所 設 定 的 限 制 將 不 會 列 印 此 類 型 的 後 續 錯 誤 i=3240 x1=51 x2=11.608330497 x3=0 x4=4 x5=0 y5=. _ERROR_=1 2

_N_=3240 NOTE: 無 法 在 下 列 位 置 執 行 數 學 運 算 運 算 結 果 已 設 定 為 遺 漏 值 每 個 位 置 的 指 定 方 式 : 在 ( 行 ):( 欄 ) 的 ( 次 數 ) 159585 ( 位 於 74:12) NOTE: There were 20000000 observations read NOTE: The data set WORK.SLOW has 20000000 observations and 7 NOTE: DATA statement used (Total process 1:38.79 12.06 seconds 當 除 以 0 時,SAS 輸 出 的 結 果 為 缺 失 值 並 在 LOG 中 註 記 NOTE: 兩 個 程 式 的 結 果 會 相 同, 但 是 程 式 2 會 較 有 率 效 3

技 巧 6: 善 用 PROC step 中 的 WHERE 敘 述 許 多 的 PROC step 有 支 援 WHERE 敘 述, 當 我 們 在 使 用 此 類 PROC step 並 只 想 分 析 部 分 資 料 時, 應 善 用 WHERE 敘 述 使 用 WHERE 敘 述 可 不 必 為 了 此 分 析 執 行 DATA step 而 產 生 中 間 資 料 檔, 不 只 節 省 時 間 亦 節 省 空 間 例 如 PROC MEANS, PROC SUMMARY, PROC UNIVARIATE, PROC PRINT 等, 均 有 支 援 WHERE 敘 述 範 例 6: 以 PROC MEANS 分 析 變 數 x2, 但 只 需 要 分 析 x5 = 1 部 分 的 資 料 程 式 1: 效 率 較 差 DATA slow; SET demo; WHERE x5 in ("1"); PROC MEANS DATA=slow MAXDEC=2; VAR x2; NOTE: There were 6002755 observations read WHERE x5='1'; NOTE: The data set WORK.SLOW has 6002755 observations and 6 NOTE: DATA statement used (Total process 16.57 seconds 5.31 seconds 程 式 2: 效 率 較 佳 PROC MEANS DATA=demo MAXDEC=2; VAR x2; WHERE x5 in ("1"); NOTE: There were 6002755 observations read WHERE x5='1'; NOTE: PROCEDURE MEANS used (Total process 3.18 seconds 3.70 seconds NOTE: There were 6002755 observations read WORK.SLOW. 4

NOTE: PROCEDURE MEANS used (Total process 0.67 seconds 1.18 seconds 先 將 x5= 1 的 資 料 存 入 中 間 資 料 庫 slow, 再 做 PROC MEANS 分 析 若 未 來 不 再 需 要 此 中 間 資 料 庫 slow, 不 只 效 率 較 差 還 佔 用 空 間 直 接 提 取 資 料 庫 demo 中 x5 = 1 的 資 料 做 PROC MEANS 分 析 技 巧 7: 善 用 PROC step 中 的 CLASS 敘 述 許 多 的 PROC step 有 支 援 CLASS 敘 述, 當 我 們 在 使 用 此 類 PROC step, 並 希 望 分 析 結 果 依 某 變 數 分 組 呈 現, 應 善 用 CLASS 敘 述, 不 需 一 定 要 使 用 BY 敘 述 使 用 CLASS 敘 述 可 不 必 專 為 了 此 項 分 析 預 先 執 行 資 料 排 序, 當 資 料 尚 未 依 分 組 變 數 排 序 時, 使 用 CLASS 敘 述 便 省 下 了 執 行 排 序 所 需 的 時 間 例 如 PROC MEANS, PROC SUMMARY, PROC UNIVARIATE 等, 均 有 支 援 CLASS 敘 述 5

範 例 7: 以 PROC MENAS 分 析 變 數 x2, 並 依 變 數 x5 分 組 分 析 並 顯 示 結 果 程 式 1: 效 率 較 差 PROC SORT DATA=demo; BY x5; PROC MEANS DATA=demo VAR x2; BY x5; MEAN STD MAXDEC=2; NOTE: There were 20000000 observations read NOTE: The data set WORK.DEMO has 20000000 observations and 6 NOTE: PROCEDURE SORT used (Total process 1:09.90 36.82 seconds 程 式 2: 效 率 較 佳 PROC MEANS DATA=demo VAR x2; MEAN STD MAXDEC=2; CLASS x5; NOTE: There were 20000000 observations read from the data set NOTE: PROCEDURE MEANS used (Total process 4.00 seconds 7.65 seconds NOTE: There were 20000000 observations read NOTE: PROCEDURE MEANS used (Total process 7.61 seconds 4.21 seconds 6

使 用 BY 敘 述, 將 分 析 依 x5 分 組, 必 需 用 在 已 經 經 過 x5 排 序 後 的 資 料, 故 對 沒 有 經 x5 排 序 的 資 料 就 必 需 先 執 行 PROC SORT 排 序 使 用 CLASS 敘 述, 將 分 析 依 x5 分 組, 則 不 需 要 預 先 執 行 排 序 這 個 步 驟 技 巧 8: 使 用 PROC APPEND 取 代 SET 敘 述 追 加 資 料 當 有 新 的 個 案 進 來, 整 理 了 一 個 新 的 檔 資 料 檔 與 原 有 資 料 檔 有 相 同 的 變 數, 想 要 將 新 的 資 料 檔 追 加 於 原 有 資 料 檔 時, 可 以 使 用 SET 敘 述 或 PROC APPEND 使 用 SET 敘 述 時,SAS 會 兩 個 資 料 檔 均 讀 取 若 使 用 PROC APPEND 則 不 讀 取 BASE= 下 的 資 料 檔, 只 讀 取 DATA= 下 的 資 料 檔 故 使 用 PROC APPEND 會 較 有 效 率, 尤 其 是 在 BASE= 下 的 這 個 資 料 檔 相 當 大 的 時 候 7

範 例 8: 新 資 料 檔 new 與 原 資 料 檔 demo 有 相 同 的 變 數, 欲 將 資 料 檔 new 追 加 於 原 資 料 檔 demo, 更 新 資 料 檔 demo 程 式 1: 效 率 較 差 DATA new; DO i=9*1e6+1 TO 9*1E6+9*1E3; LENGTH x1 3; x1=floor(100*ranuni(0)); x2=25*rannor(0); x3=floor(50*rannor(0)); LENGTH x4 3; x4=ranbin(0, 30, 0.2); LENGTH x5 $1; x5=rand("bern", 0.3); OUTPUT; END; 程 式 2: 效 率 較 佳 DATA new; DO i=9*1e6+1 TO 9*1E6+9*1E3; LENGTH x1 3; x1=floor(100*ranuni(0)); x2=25*rannor(0); x3=floor(50*rannor(0)); LENGTH x4 3; x4=ranbin(0, 30, 0.2); LENGTH x5 $1; x5=rand("bern", 0.3); OUTPUT; END; DATA demo; SET demo new; NOTE: There were 20000000 observations read NOTE: There were 9000 observations read from the data set WORK.NEW. NOTE: The data set WORK.DEMO has 20009000 observations and 6 NOTE: DATA statement used (Total process 37.42 seconds 13.07 seconds PROC APPEND BASE=demo DATA=new; NOTE: 正 在 附 加 WORK.NEW 至 NOTE: There were 9000 observations read from the data set WORK.NEW. NOTE: 已 增 加 9000 個 觀 測 值 NOTE: The data set WORK.DEMO has 20009000 observations and 6 NOTE: PROCEDURE APPEND used (Total process 0.23 seconds 0.03 seconds 8

SAS 讀 入 資 料 檔 demo (2 千 萬 筆 資 料 ) 及 資 料 檔 new (9 千 筆 資 料 ), 再 做 粘 合 並 重 新 寫 入 demo 資 料 檔 SAS 只 讀 入 資 料 檔 new (9 千 筆 資 料 ), 追 加 至 demo 資 料 檔 並 寫 入 注 意 : 使 用 PROC APPEND 時, 若 兩 個 檔 案 變 數 不 同, 可 加 上 FORCE 選 項 FORCE 選 項 告 訴 SAS, 無 論 有 無 錯 誤, 都 強 制 執 行 PROC APPEND, 便 可 強 制 合 併 不 同 變 數 資 料 型 態 變 數 資 料 長 度 或 DATA= 下 的 資 料 檔 有 不 同 的 變 數 時 若 以 以 上 範 例 為 例, 程 式 可 以 寫 成 : PROC APPEND BASE=demo DATA=new FORCE; 但 因 上 例 中, 兩 個 資 料 檔 的 變 數 一 致, 故 不 用 加 FORCE 選 項 亦 能 正 確 執 行 9

後 記 以 上 的 幾 個 SAS 分 析 小 技 巧 為 理 論 上 一 般 情 況 SAS 運 行 較 有 效 率 的 方 法, 本 篇 提 供 的 測 試 實 例 只 是 在 特 定 軟 硬 體 環 境 資 源 下 的 某 一 次 結 果, 若 為 其 他 的 特 例 情 況 或 環 境, 較 有 效 率 的 技 巧 可 能 並 非 一 定 那 麼 有 效 率 但 是, 熟 悉 一 些 有 效 率 的 SAS 程 式 寫 法, 可 以 在 實 際 操 作 SAS 時, 判 斷 有 哪 些 不 同 的 方 法 可 以 達 成, 並 適 時 的 應 用 在 自 己 的 分 析 上 本 篇 使 用 SAS 9.3 版 本 進 行 主 要 參 考 資 料 : Bruce Gilsen (1999). SAS Program Efficiency for Beginners. In the SUGI 24, Beginning Tutorials Kirk Paul Lafler (2012). Top Ten SAS Performance Tuning Techniques. In the SAS Global Forum 2012, Systems Architecture and Administration 10