顯示具有 SAS 標籤的文章。 顯示所有文章
顯示具有 SAS 標籤的文章。 顯示所有文章

2022年1月23日

〔SAS〕資料處理實例►找出符合條件的日期資料

偶而些朋友和我討論資料處理的問題,有時候只是資料處理流程討論,有時候是程式或語法。我曾透過許多高手的範例而學習到很多,這一次打算把一些有趣的實例,寫成範例,希望對有緣人有幫助(但對點閱率應該沒幫助)。

同一個問題,可以有許多不同的處理流程,本次的方法不見得是最好,也歡迎大家提供不同的流程和語法。

網頁廣告剛好也是你有興趣的,請幫忙點擊廣告,讓我更有動力寫出下一篇文章吧。

2021年9月4日

〔SAS〕以PROC COMPARE比較資料檔

比較資料檔的工作,常見在問卷採用雙重資料鍵入(double data entry),比較兩次鍵入資料檔的差異性。

PROC COMPARE的語法不複雜,依據慣例先建立範例資料檔以供後續練習。

DATA Keyin_1;
INPUT id name$ sex$ age v1 v2 v3 v4 v5;
CARDS;
1 Allan M 43 1 1 2 3 4
2 Bobby M 32 2 2 3 4 1
3 Cindy F 19 4 4 4 2 1
4 Daisy F 25 4 3 2 3 3
5 Eric M 54 2 3 1 4 2
;
RUN;

DATA Keyin_2;
INPUT id name$ sex$ age v1 v2 v3 v4 v5;
CARDS;
3 Cindy F 19 3 4 4 2 1
1 Allan M 34 1 1 2 3 4
4 daisy M 25 4 3 2 3 2
2 Bobby M 32 2 2 3 4 1
5 Eric F 54 2 3 2 4 2
;
RUN;

假設Keyin_1與Keyin_2分別為兩次鍵入的資料檔,很不幸這兩個檔案,只有ID=2這一筆資料完全一致,其他筆資料均有不同之處。

PROC COMPARE BASE= Keyin_1 COMPARE= Keyin_2 NOVALUES;
RUN;

2020年6月14日

〔SAS〕使用ODS EXCEL將報表匯出為XLSX檔

長久以來SAS程序產出的報表,大都透過ODS HTML將報表轉EXCEL檔,之前介紹過ODS TAGSETS.EXCELXP的語法(後續簡稱ExcelXP),也很少被使用來處理報表轉EXCEL檔的需求。

ODS HTML應只是將HTML報表的副檔名改為XLS,WIDOWS系統在預設環境下,自然會以EXCEL開啟,算是一種偷吃步吧,但每次開啟檔案,EXCEL均會出現警告「’OOO.xls’的檔案格式與副檔名不相符。此檔案可能已損毀或不安全。除非您信任此檔案的來源,否則請勿開啟此檔案。您仍要開啟此檔案嗎?」(如下圖)。

’OOO.xls’的檔案格式與副檔名不相符。此檔案可能已損毀或不安全。除非您信任此檔案的來源,否則請勿開啟此檔案。您仍要開啟此檔案嗎?

雖然只是按一個「是(Y)」就可開啟,但檔案很多時,還是挺煩人的。而且就算使用ExcelXP來匯出報表,依然會出現相同的警告,因為ExcelXP所產生的EXCEL檔不是原生的EXCEL檔格式(native Excel format (.xlsx)),詳情請參考ODS TAGSETS.EXCELXP and ODS EXCEL SHOWDOWN

2020年2月15日

〔SAS〕使用SGPLOT繪散佈圖及程式巨集化

散佈圖(Scatter Plot、Scatter Diagram)亦稱為散布圖、相關圖等。目前在SAS繪製散佈圖有兩個較為簡單方法,一為使用PROC CORR,相關語法可見SAS官網的說明,用PROC CORR的方法相當簡單,而且同時會把人數、相關係數、檢定的P值呈現於圖中,但如要修改圖形或增加其他說明限制就很大了。

另一方法為本篇將分享的PROC SGPLOT,但限制為不會自動在圖形上呈現人數、相關係數和檢定的P值,此限制可透過巨集的幫忙而增加至圖形中,以PROC SGPLOT所繪統計圖,在之後需的編修彈性就高很多。

最後我們會把整組程式以改編為巨集程式,方便未來使用。

散佈圖(scatter plot)+橢圓圖(prediction ellipse)+迴歸線(regression line):

散佈圖(scatter plot)+橢圓圖(prediction ellipse)+迴歸線(regression line)

2018年3月26日

〔SAS〕使用SGPLOT繪盒鬚圖

盒鬚圖(Box Plot)亦稱為盒型圖。在SAS裡面盒鬚圖的說明可到SAS官網說明文件查看,簡單說盒子底部為Q1(第25百分位數),盒子內部中線為中位數,盒子上端為Q3(第75百分位數),盒子中間的符號通常為平均值。天線一般來說是1.5倍四分位距(intra-quartile range, IQR)中最小或最大值,而在天線外面的點一般為極端值(outlier)。

盒鬚圖如下:

2018年3月9日

〔SAS〕使用SGPLOT繪長條圖及折線圖

長條圖(Bar Chart)亦可以稱為柱狀圖、條圖、條狀圖、棒形圖等,應該是非常使用的圖形,與折線圖(Line Chart)一起繪製於同一張圖上,稱為Bar-Line Chart。

這次要分享的為Bar-Line Chart,統計圖結果如下:

Bar-Line Chart

2018年2月20日

2018年2月11日

〔SAS〕使用SGPLOT繪製熱圖(Heatmap)

身旁許多朋友都認為SAS所繪製統計圖不美麗,語法也不好寫,許多年前新增的「ODS GRAPHICS」系列我想就是改善這些狀況,經過這幾年的強化,其功能和精美程度以非吳下阿蒙。

最近幫朋友做了一份資料(可惜無法把結果與大家分享),這份報告中使用了數個統計圖呈現結果,雖然不能將結果分享出來,但統計圖的語法倒是可以和大家切磋,希望能讓使用SAS的朋友從中獲得一些想法。

ODS GRAPHICS在網路上很容易找到說明,所以這次不會花太多時間說明每一個語法的功能,倒是大家可以實際操作一遍,會比較有感覺。

這次分享的是「熱圖(Heatmap)」,圖形結果如下:

熱圖(Heatmap)

2018年1月27日

〔SAS〕列聯表捕無數值的欄(列)

有沒有遇過在製作表格式時,某變項中的類別不見,但在製表時必須將消失的類別補上的狀況呢?不懂嗎?看看下面的表格吧,臺中市的結果沒出現在這份資料中,但最終表格還是必須把臺中市放上去,就算所有的結果都是遺漏值或零。

但SAS的PROC FREQ如果資料中沒有這項類別的資料,自然不會呈現於報表中!所以這次的分享,就是如何「強迫」PROC FREQ列出不存在但又想呈現的類別。

2017年12月17日

【SAS小技巧】小心 “浮點運算陷阱”

先來看看下面這一個簡單的程式和結果。

data test;
     input x y;
     datalines;
     0.54 0.36
     54 36
;
data test1;
     set test;
     pct=((x-y)/y)*100;
     if pct=50 then chk=1;
run;
proc print data=test1;
run;

結果如下圖:

image

明明PCT看起來都是50,為什麼只有第2筆的CHK為1?

2017年9月8日

【SAS小技巧】在程式編輯視窗取代「換行符號」

編輯SAS程式有時會從excel中複製變項名稱,例如譯碼簿轉到excel後選取所需變項貼到SAS中。如下圖選取「英文欄位」中的所有變項。
image

但貼到SAS後也會保持原樣,也就是一行一行的在程式編輯器中,如下圖。
image

2017年2月11日

SAS PROC SQL入門 (Part C)-Summary Functions

本篇主要介紹Summary Functions在SQL中的使用。
Summary Functions可以用來計算所有資料筆的函數,類似Proc Means的功能,但依據寫法也可能會如一般函數的結果。

常用的Summary Functions有Mean、Count、Max、Min等,其餘函數表列於下:

image

2016年10月8日

【SAS 小技巧】小數點後做無條件捨去或進位

SAS內建函數中無條件捨去的函數為CEIL,無條件進位的函數為FLOOR,但在預設功能只能做到捨去或進位到整數。看一下SAS的說明及範例
無條件捨去:
CEIL(argument)
image34
  無條件進位:
FLOOR(argument)
image29

2016年5月30日

【SAS 小技巧】替換文字中的中文字串(K函數+Macro)

曾在用K函數處理中文字串文章中提及專門用來處理中文的K函數,但沒有實際的例子,最近發生了一個案例,把處理心得分享給大家參考。

原問題為,想把地址中的某一條路刪除。

例如:
台北市中山路50號 → 台北市50號
北市板橋區中山路二段 → 北市板橋區二段

這樣的取代如果用EXCEL或WORD不難處理,但在SAS中似乎不是那麼人性。

以下程式我不會特別說明語法的指令,有興趣者可請自行研究或連至我推薦的網頁查詢。

2015年3月17日

【SAS 小技巧】用K函數處理中文字串

在Facebook中的「SAS戰術應用精研社」,網友偶會提到使用文字函數處理中文時遇到一些的狀況,如果使用一搬文字函數如compress、scan、substr、index等可能是得到一堆亂碼,或是找不到設定文字,又或是找到非預期中的字,或等,例如鄭姓網友所提的問題:

2014年5月8日

【SAS 小技巧】將資料以所需格式匯出到Excel

這是一個很有趣的需求,如何將SAS資料以所需格式直接匯出到Excel中,而不需要在Excel中手動調整,例如所有的變項都以「文字」格式匯出,或是數字格式匯出但在Excel中依然要保持Z format,也就是數字前補零。

這次所要挑戰為將結果匯出到Excel為《圖1》的樣子。

F03
《圖1》

2013年12月20日

【SAS 小技巧】匯出Excel工作表名稱前會出現底線


透過SAS/ACCESS Interface to PC Files 的PROC EXPORT程序輸出結果,會遇到工作表(sheet)的名字前出現底線(underscore),例如在SAS裡面設定工作表名稱為「A9」,但在Excel打開就變成「_A9」。

這是一個小到不行的疑問,不過多年來我也沒有去了解為何,反正大部分狀況都沒什麼影響。不過最近遇到一個工作,才讓我認真去找一下答案。最後找的答案很簡單,就是命名的時候避免使用【1~3字母1個或多個數字】的組合,可以參考下面的實際得到的結果。

2013年8月13日

SAS PROC SQL入門 (Part B)


這篇為延續2011年所寫的SAS PROC SQL入門 (Part A)小文章(謎之聲:拖搞也拖太久了!!)

本篇主要介紹如何透過SQL建立資料檔,及如何做水平合併資料,同時會提供SQL語法及傳統Data step的語法,或許這樣對學習SQL會比較有幫助。

先建立兩個練習的檔案,分別為ER1和DD1兩檔案,於【程式1】

2013年8月5日

【SAS 小技巧】全形英文數字轉為半形

 

這是在FB社團被問到的題目,『如何將全形英文字轉成半形英文字』。

在SAS沒有函數能完成類似MS WORD中的功能鍵。

image

2013年6月23日

【SAS 小技巧】以文字格式讀取CSV資料檔中的欄位(變項)

 

在實務工作將資料中所有的欄位(變項)先以文字格式(character format)匯入,在做後續的分析是很實務的作法。為何會有這種作法?主要是SAS以PROC IMPORT匯入CSV檔案時,會預先猜測欄位的格式,在"自動"給予文字或數字格式,如果不幸某個欄位是以混合格式(mixed format)鍵入,SAS很有可能會採用數字格式匯入該欄位,而導致欄位中非數字的資料變成遺漏值(missing value)。

這篇小文章中我打算介紹三種方法來處理這樣的方法,如果你的時間不夠,請直接跳到方法三。