目前分類:SAS程式編輯武功秘笈 (36)

瀏覽方式: 標題列表 簡短摘要

 

有許多的軟體可以繪製地圖,例如ArcGIS、QGIS等地理信息系統軟體,簡稱GIS軟體(Geographic Information System)但今天想利用SAS統計軟體介紹台灣地圖的繪製,程式參考SAS公司的部落格文章 ( 如何繪製地圖圖表 - SAS Taiwan )。

地理資訊中,包含經度,緯度,和海拔,以x、y、z坐標來標註。以及劃分疆界的地名,例如國名、縣市名、或鄉鎮市區名等。

image

我們可以從【政府資料開放平臺】的網站首頁,輸入【行政區界】,蒐尋台灣的地理資料,進入後,會有3種台灣的圖資可以下載,包括22縣市的圖資、368個鄉鎮市區的圖資,以及台北市12行政區的圖資。

image

下載檔案時,建議選擇SHP格式的圖資檔,SHP 是一種儲存地理圖資的檔案格式。

image

 

SHP格式的檔案是由數個檔案合成的,下載後,會收到一個.ZIP檔,解開後,裡面有幾個檔案,每個檔案會有不同的功用,但一定至少包含 3 個檔案: .shp (記錄地理圖資的點線面資訊), .shx (地理圖資的索引),.dbf (地理圖資的屬性資料)(參考政府資料開放平臺網站資訊)。

文章標籤

estat 發表在 痞客邦 留言(0) 人氣()

過去的文章曾介紹過ifn函數、dif函數、first.variable三種指令,這次,想以這三個指令,來介紹健保資料庫分析中的疾病定義。

在健保資料庫分析的各種疾病定義中,常聽到的一種定義方式為:任一年出現-二次某疾病診斷碼,並以此定義特定的疾病。

任一年二次以上的就醫記錄的概念,簡單來說,就是任意的兩筆資料間的天數差要小於一年,即365天。這是該定義最寬鬆的條件,因為一年內也可以有3筆或3筆以上的資料,但至少要2筆,且兩筆的天數差小於一年。如果第1筆與第2筆的就醫記錄超過365天,含365天,那麼.…我們要繼續往下找,看第2筆與第3筆間是否超過365天,並依此推算下去,直到所有就醫記錄全比對完。

 

1. ifn函數

首先,我們介紹ifn函數,nnumeric,數值的意思。這個函數包含4個參數,適用於數值型態的資料處理。ifn,言下之意,就是針對數值型態的資料,在函數中寫條件句,並依不同條件執行資料處理的動作。

函數中的第一個參數是執行資料處理的條件,第二個參數是符合左列條件所要給予的正確賦值,第三個參數是不符合左列條件所要給予的錯誤賦值,最後一個是當資料為缺失值時所給予的賦值,這些值,都是可以自由定義的。

如以下範例所示:這個範例中的條件由餘數函數mod( )構成,函數中的x為被除數,2為除數,也就是x除以2的餘數為何?如果遇到資料為偶數,則為整除,餘數為0,正確賦值為1。遇到奇數,無法整除,餘數不為0,錯誤賦值為0

 ifn(mod(x,2)=0,1,0);

透過這種方式,我們可以定義資料為偶數或奇數。

文章標籤

estat 發表在 痞客邦 留言(0) 人氣()

 

當您在分析健保資料時,一次要定義幾個診斷碼,甚至許多的疾病,有什麼SAS程式指令是有效率又好維護的呢?
這是
#以斯帖統計 的Youtube頻道新單元,這個單元是健保資料分析課程的Sophie老師為我們錄製影片!影片中介紹 #array指令 的操作,當您知道如何使用這指令,將更有效率地執行相似的重覆動作,例如將門診3組診斷碼定義為特定的疾病。


快進來看吧!希望能對您的資料分析有幫助。

 

封面02(button)-01 (1).jpg

 

/*--原始程式--*/

data aa;

文章標籤

estat 發表在 痞客邦 留言(0) 人氣()

 

本單元介紹如何自動儲存 SAS中的logoutput輸出結果到指定檔案,如果我們利用SAS程式,將資料logoutput輸出結果自動儲存到硬碟中指定的位置,可以寫以下程式,而詳細的說明請看Sophie老師的影片介紹。

 

封面01(button)-01.jpg

 

範例程式

/*---建立虛擬的資料---/

data demo;
         do x=1 to 10;
        do y=1 to 12;

文章標籤

estat 發表在 痞客邦 留言(0) 人氣()

以下將介紹 first.variable 與 last.variable 的應用 , 利用這兩個指令,完成以下三項任務
   (1)歸戶
   (2)定義第幾次就醫記錄
   (3)定義門診就醫三次以上;

*補充說明
first.variable =1 , 根據variable定義第一筆 (通常寫成 first.id)
first.variable =0 , 根據variable定義非第一筆
last.variable =1 , 根據variable定義最後一筆 (通常寫成 last.id)
last.variable =0 , 根據variable定義非最後一筆

必須與 by variable一起寫入程式,以說明定義第一筆與最後一筆的依據是什麼? ;

文章標籤

estat 發表在 痞客邦 留言(1) 人氣()

 

 健保資料分析時,會遇到循環性的資料處理步驟,以1:1個案配對(individual matching)的資料處理過程為例,1個暴露個案(cohort study exposure)1個病例個案(case-control study 中的 case)依特定條件配到1個對照個案,此時要將該對照個案從對照組的抽樣母體中扣除,再繼續找下一個exposurecase的對照個案,直到對照組的個案建立完成,因此是由巨集指令(Macro Language)的迴圈進行此連續動作。而扣除的方式是以身份證號(ID)以及生日(ID_birthday)做為關鍵變項(key variable),將被抽中者從抽樣母體中扣除,因此在對照組的抽樣母體中再也找不到該位病人的資料,因此不會被之後的exposurecase再抽中,以致相同的對照個案有重覆出現的情形。

 

如果在過程中,其中的一個exposurecase找不到對照個案,就毋需從對照組的抽樣母體中做任何排除的動作,但必須有程式作為判斷機制,若未抽中對照組,下一個抽樣步驟所使用的對照組之抽樣母體與前一個步驟的抽樣母體相同。但問題是,要如何判斷該進行扣除的動作,還是下一個步驟延用前一步驟的對照組抽樣母體?沒有抽中符合條件的對照個案,log視窗(日誌)中將出現類似以下的訊息:


NOTE: There were 55759 observations read from the data set F.CONTROL_1.

NOTE: The data set WORK.CONTROL_1 has 0 observations and 12 variables.

 

f.control_1為某retrospective cohort study(回溯性世代研究)的第一個exposure之對照組抽樣母體,依據特定編號的exposure的配對條件進行資料截取後,發現截取出來的筆數是0筆,檔名是work.control_1

 

文章標籤

estat 發表在 痞客邦 留言(0) 人氣()


以下介紹的範例取材自已絕版的『SAS 程式技巧』(作者:陳坤芳; 1996 6-12~6-13)中的一段程式應用,主要的指令為RETAIN搭配FIRST.VARIABLE、LAST.VARIABLE,所要執行的任務為『分組資料的加總』,在之前的部落文─『SAS中的描述性統計: PROC MEANS指令曾提到以描述性統計的語法:PROC MEANS計算分組的描述性統計量,有興趣,可以比較兩種方法的差異。

【程式一】中,建立了9筆資料,prodid為產品編號,sales為銷售額


【程式一】

estat 發表在 痞客邦 留言(0) 人氣()

 

過去曾經介紹過以SASIFN(), LAG()等函數將資料向下垂直移動,但SAS可否有LAG()函數的相反函數,也就是將資料垂直向上移動的函數,答案應該是沒有的,但可透過PROC EXPAND程序執行資料的垂直向上以及向下的移動,甚至是移動數個列數,該語法屬於Time series(時間序列)的應用。

【程式一】建立範例資料,資料中包含ID(身份證號)sex(性別)Birthday(生日)date (就醫日期)

 

【程式一】

data aa;
        input id $ sex $ birthday yymmdd10. +1 date yymmdd10.;
        format birthday date yymmdd10.;
cards;
A01 F 1958-01-04 2001-02-03

estat 發表在 痞客邦 留言(0) 人氣()

 

在資料分析時,經常遇到資料格式不是我們預期的,例如日期為文字型態,因此無法計算研究對象的年齡、或與時間有關的所有日期資料,或是資料合併時,發現兩個檔的資料型態不同,以致資料無法合併。以下將簡介SAS中的PUT()INPUT()等函數的應用。

PUT( )函數的通式:PUT(SOURCE, INFORMAT),可將數值型態的資料轉成文字型態的資料。

INPUT( )函數的通式:INPUT(SOURCE, INFORMAT),可將文字型態的資料轉成數值型態的資料。

函數中的SOURCE指的是變項名稱,INFORMAT指的是想要轉換的資料格式,以下以程式建立一筆資料,共4個變項,n. fee, date, date1,讀入的資料格式如下。

 

【產生範例資料檔】

data aa;
       input n fee $ date $ date1;
cards;

estat 發表在 痞客邦 留言(0) 人氣()

 

   若研究者想做一張單變項的回歸分析表, 當要看的影響因子愈多, 要進行的單變項回歸分析次數愈多, 於是要反覆執行很多的model, 透過巨集指令功能,即能快速執行完所有的model

    以下同樣要介紹SAS的巨集指令, 以及搭配ODS(Output Delivery System)功能, 以快速產生COX-REGRESSION的統計表格

   如果研究者想看某族群的環境污染劑量與癌症的關係,於是進行劑量效應關係分析(DOSE-RESPONSE EFFECT),並利用在圖表中的範例資料進行分析, 該檔有幾個主要變項:stdno (研究序號), gender (性別), inage(開始曝露於環境污染源的年齡), foloow_up(觀查時間:), dose (環境污染物的劑量), ca1-ca22(各種癌症的欄位名稱, 且欄位中的1為有發生, 0為未發生)。(僅呈現10筆)


 Cox-regression  


estat 發表在 痞客邦 留言(0) 人氣()

 

分層抽樣之基本觀念請參考另篇文章:分層隨機抽樣 (Stratified Random Sampling)  

 

以下為分層不等比例隨機抽樣之SAS的應用:

 

[程式一]中建立30筆資料, 變數包括no, age, sex,檔名為AA,其中男性10女性20尼曼配置法 (Neyman allocation)估算,女性將抽出7個樣本,男性將抽出2個樣本

  [程式一];

data aa;

文章標籤

estat 發表在 痞客邦 留言(0) 人氣()

 

分層抽樣之基本觀念請參考另篇文章:分層隨機抽樣 (Stratified Random Sampling)

以下為分層等比例隨機抽樣之SAS的應用:

 

[程式一]中建立30筆資料, 變數包括no, age, sex,檔名為AA,其中男性10女性20筆,欲抽出30%的樣本,根據比例配置法(Proportional allocation),女性將抽出6個樣本,男性將抽出3個樣本

 [程式一];

data aa;
input no age sex $ @@;
cards;

文章標籤

estat 發表在 痞客邦 留言(0) 人氣()

 

首先在[程式一]建立10筆資料,包含no, age ,sex等變項。

[程式一]

data aa;
input no age sex $ ;
cards;
1 23 F
2 24 F
3 52 M

文章標籤

estat 發表在 痞客邦 留言(0) 人氣()

 

在健保資料中,若要看每年的承保人數、醫護人員數、慢性病盛行人數,若未留意這些資料在各年是不連貫的, 例如承保檔只存在加保與退保的記錄, 若無變更, 中間的各年間是不會有資料的;

在健保資料庫中定義了糖尿病的發生資料,若想看糖尿病的盛行趨勢, 若中間有未就醫的記錄, 例如就醫年份為1997,1998,2000,2001,2003,2004,2005,但19992002年未就醫,對於一旦確定是糖尿病的患者,若非死亡的因素,應該一直為疾病盛行人口, 但患者若有一段時間未就醫, 如何觀察盛行率的長期趨勢?

以下介紹簡單的補值, 程式中建立2筆資料, 資料的起迄年份為IN_YEAR, OUT_YEAR, 利用DO /END的迴圈,以及OUTPUT指令即可將中間各年的資料補上。

迴圈自IN_YEAR跑到OUT_YEAR, 迴圈每跑一圈, 年份自動加 1, 新產生的年份置入新變數YEAR, 此時以OUTPUT將新的迴圈結果輸出, 一直遞迴至迴圈結束為止。 



文章標籤

estat 發表在 痞客邦 留言(0) 人氣()

 

以下將介紹以Transpose將資料橫轉直的簡單語法。

[程式一] 建立資料檔AA中,為同一個人在不同時間的分數, 包含ID(身份證號), SEX, score(分數), 等欄位。

[
程式一]
data aa;
input id $ sex $ score1-score6;
cards;
A01 F 63 75 68 86 77 91

文章標籤

estat 發表在 痞客邦 留言(0) 人氣()

 

時間的運算是許多研究中會遭遇到的問題,特別是探討值大夜班,或工作至翌日凌晨的職業醫學之相關研究。今日將介紹時間的資料格式與相關的函數,且依2種情形進行時間計算:

1. 計算24小時內的時間差

2. 跨夜的時間差

 

再依時間是否與日期結合,分為3種狀況:

1. 若時間與日期為不同變項

2. 若時間與日期已結合為同一個變項

3. 僅有時間資料(只能計算24小時的時間差,無法計算跨夜的時間差)

 

文章標籤

estat 發表在 痞客邦 留言(0) 人氣()

 

上次以PREFIX=指定轉置後的欄位名稱為以流水號型式命名的名稱,今日將介紹的是以ID指定轉置後的欄位名稱。

[程式一在資料檔中AA中包含CLASS(班級), SEX, 成績(SCORE)等欄位。


程式一]


data aa;
input class $ sex $ score;
cards;
文章標籤

estat 發表在 痞客邦 留言(0) 人氣()


SAS的資料轉置依資料的結構與轉置的目的不同, 語法略有不同, 以下介紹Transpose資料直轉橫的簡單語法。


[程式一] 是健保資料庫常見的資料型態, 同一個人在不同時間有好幾筆就醫記錄, 在資料檔中AA中包含ID(身份證號), SEX, AGE, FEE(費用), IN_DATE(住院日期)等欄位。


[ 程式一]

data aa;
input id $ sex $ age fee in_date yymmdd10.;
format in_date yymmdd10.;
cards;

文章標籤

estat 發表在 痞客邦 留言(0) 人氣()

 

通常研究者所收集的資料會有缺失值(Missing value)的情況在任何統計軟體中若不善用函數直接以『+-*/ 』符號進行數學運算,會發生無法計算的情形。

以下的例子為1筆資料3個變數其中var3為缺失值如何利用函數進行數學運算呢請參考圖片表格。函數中的參數可以是變數,或直接寫入數字或計算式。

其中四捨五入的整數小數位數第1小數位數第2, ...之取法依序為 1..1, .01....

data aa;
input var1 var2 var3 ;
cards;

文章標籤

estat 發表在 痞客邦 留言(0) 人氣()

 

本日介紹的是大批資料的匯出,且供資訊人員作為資料庫使用,若搭配網站的架設與資料查詢頁面的製作,即可完成特定資料庫的查詢網站。

為示範程式語法與說明結果,資料為範例資料,請勿引用統計結果或作其他延伸 !!

 

[任務說明]

先說明今日要完成的任務,資料匯出前,有10年的資料,包括20032012年,且有25個縣市別,為提供日後資訊人員建置資料庫,將產生250個資料檔,若再分性別,包括男性、女性、男女合計,將產生750個檔,若結合SAS的巨集指令(MACRO LANGUAGE)ODS(OUTPUT DELIVERY SYSTEM),再將資料轉為HTML格式,將節省表格產出的時間,而HTML的表格自網站下載後,可直接貼至EXCEL中,再作後續的使用。以下要完成的任務條列如下:

1. 輸出的表格必須有表頭(TITLE),表頭需包括(1)年份、(2)縣市別代碼、(3)縣市別,以及(4)表格內容說明。

2. 清楚的變項中文說明

3. 註解要清楚明確, 其中[1] 要說明(1)年份、(2)縣市別代碼、(3)縣市別,以及(4)每年的死亡人數。

4. 表格、表頭與註解要左靠

文章標籤

estat 發表在 痞客邦 留言(0) 人氣()

1 2