格式SAS Format
資料值顯示的模樣
客製化輸入到輸出特殊格式,包含文字、數值、日期與自定義格式
Contents
格式SAS Format
格式是我們在SAS上所看見的資訊,它可能與原本的資料值有很大的不同或是很類似
它可以用來讀取特殊形式的資料,也可以用來輸出特殊形式的訊息
舉例來說:有1個值是23637,它可以透過格式顯示成$23,637,也可以顯示成00023637
取決於它原本資料所代表的意義與我們想賦予的訊息
SAS看到的是原本的資料值、我們看到的是格式化後的資訊
所以更改格式,只會影響到我們看見的資訊,並不會修改SAS對這個值的認知
內建格式
SAS有許多的內建格式,依照屬性可以分為文字、數值還有日期這三類格式
格式的組成為 <$>format<w>.<d>
- $:當要為文字變數套用格式時,需在最前面使用這個符號
- format:用來放入想要套用的SAS format
- w:表示這個格式的寬度
- .:表示與.相連的前後為一個完整的格式名稱
- d:表示數值變數中浮點數的小數位寬度
data _null_;
char="ABCDEFGHIJK";
put char= $3.;
num=12345.6789;
put num= 12.2;
date=23456;
put date= date9.;
run;
下面的char、num、date分別為套用文字、數值、日期格式後的不同值
文字格式
套用在文字變數上的文字格式,在套用格式時,格式名稱必須以$為開頭
常用格式 | 範例(value=ABCDEFGH) | 輸出 |
$W. | $5. | ABCDE |
$charW. | $char5. | ABCDE |
在套用文字格式時,應注意格式會從文字變數左邊的空白開始計算,如果觀察值的左邊是有空白的時候,應該先處理資料(套用Left 函數)
data _null_;
char1="ABCDEFGHIJK";
put char1= $5.;
char2=" ABCDEFG";
put char2= $5.;
char3=" ABCDE";
put char3= $5.;
run;
Char1觀察值的左邊沒有任何空白,在套用$5.格式後,會完整的顯示出ABCDE的值
Char2觀察值的左邊有4個空白,在套用$5.格式後,只會顯示出A的值
Char3觀察值的左邊有6個空白,在套用$5.格式後,不會顯示出任何的值
數值格式
套用在數值變數上的數值格式,W的寬度必須包含「.」與「d」的寬度,才不會導致剛好在套用格式後被截斷
常用格式 | 說明 | 範例(value=123456789) | 輸出 |
W.d | 依照小數位顯示數值 | 12.2 | 123456789.00 |
bestW.d | 依照小數位由SAS自動選擇最適合的數值格式 | best12.2 | 123456789 |
commaW.d | 以每3位數放置1個逗號顯示數值 | comma15.2 | 123,456,789.00 |
zW.d | 在觀察值前面補0直到W寬度 | z12. | 000123456789 |
data _null_;
num=123456789;
put num= 12.2;
put num= best12.2;
put num= comma15.2;
put num= z12.;
run;
日期時間格式
套用在數值變數上的日期時間格式,與數值格式相同的是同樣套用在數值變數上,但有更廣泛的格式可以使用
在介紹日期時間格式前,不得不再次提到本篇文章中開頭所講的「SAS看到的是原本的資料值、我們看到的是格式化後的資訊」
為什麼要特別在日期時間格式拿出來講呢? 因為當你在SAS中看到18Sep2024,SAS看到的卻是23637數值,從格式化後的值完全無法辨別它的真實資料值
因為日期時間格式包含了日期、時間及日期時間格式,所以接下來分別介紹它們的常用格式
日期格式:
常用格式 | 範例(value=23637) | 輸出 |
dateW. | date9. | 18SEP2024 |
yymmddw. | yymmdd8. | 24-09-18 |
yymmddn. | yymmddn8. | 20240918 |
YearW. | year4. | 2024 |
MonthW. | month2. | 9 |
DayW. | day2. | 18 |
時間格式:
常用格式 | 範例(value=83642.894642) | 輸出 |
TimeW.d | Time. | 23:14:03 |
HourW.d | Hour5.1 | 23.2 |
HHMMW.d | HHMM. | 23:14 |
日期時間格式:
常用格式 | 範例(value=2042320767.9) | 輸出 |
E8601DTW.d | E8601DT25.2 | 2024-09-18T23:19:27.85 |
輸入&輸出格式敘述句
在SAS中使用格式的方式為透過輸入格式敘述句(Informat Statement)與輸出格式敘述句(Format Statement)
這兩種差別在於Informat敘述句是用來讀取格式化後的資料,會搭配input敘述句使用;而Format敘述句是用來套用與展示格式
Informat Statement
用來讀取格式化後的資料
用法有2種:
1、讀取格式化後的資料
data test;
informat date yymmdd10.;
input date;
cards;
2024-01-13
2024-07-08
;
run;
- 透過Informat敘述句來告訴SAS,接下來要讀取的date變數是以日期格式化後的值,並且要儲存為數值欄位
- 如果少了Informat敘述句,程式會執行失敗,因為SAS會認為input敘述句裡date宣告的是數值欄位、但讀到「2024-01-13」時卻是文字欄位
2、清除輸入格式
data test1;
informat date yymmdd10.;
input date;
cards;
2024-01-13
2024-07-08
;
data test2;
set test1;
informat date;
run;
- 透過Informat敘述句來告訴SAS要清除date的輸入格式
- 圖片左半邊是test1的date欄位屬性;右半邊是test2的date欄位屬性
Format Statement
用來套用與展示格式
用法有2種:
1、套用格式
data test;
input date;
format date date9.;
cards;
23456
23333
24444
;
run;
- 透過format敘述句來告訴SAS,接下來要讀取的date變數最後要以date9的格式套用
2、清除目前套用格式
data test1;
input date;
format date date9.;
cards;
23456
23333
24444
;
data test2;
set test1;
format date;
run;
- 透過format敘述句來告訴SAS要清除date的輸出格式
- 圖片左半邊是test1的date值(套用date9格式);右半邊是test2的date值(未套用任何格式)
結語
關於SAS內建格式的format與Informat數量非常龐大,有興趣的人可以到官方網站尋找自己想要的格式使用
參考資料:
謝謝閱讀這篇文章,有問題歡迎在下方留言