自定義輸入和輸出格式
-
-
- 3.1 用 informat 和 format 自定義格式
- 3.2 用picture 照個輸出模版
-
前期回顧: SAS 基礎(2)SAS變量的輸出格式
.
3.1 用 informat 和 format 自定義格式
基本形式:
proc format
invalue <$> 格式名 變量值或範圍1 = 輸出格式1 ...... ;
value <$> 格式名 變量值或範圍1 = 輸出格式1 ...... ;
picture 模闆名 <數值範圍>;
變量值或範圍 是字元,需要在" 格式名 " 前面加$符号。<$> 是可選内容。
例如:
-
invalue $ gender 1 = “male” 2 = “female” ;
解釋:建立輸入格式gender,當輸入 1 2時 自動變為 male ,female。male是字元要加 $
-
invalue lxfmt 1-4=same 99 = . ;
解釋:建立輸入格式 lxfmt,當輸入值為 1~ 4時,保持原有值不變,輸入99變為 ‘.’ 。
-
value $ grade “a”-“g”=“fair” “o”,“u” = “other” ;
解釋:建立輸出格式 grade,輸入值介于a~g之間,輸出位“fair”, o和u 輸出位 other。
-
value age low-<40=30 low-<50=40 50-high=50 ;
解釋:建立輸出格式 age 當輸入值 < 40 輸出為30 ,>=40 &< 50 輸出為40, >50 輸出 50 。
-
value score low-59=“不及格” other=“及格”
解釋:建立輸出格式 score 輸入值<=59 輸出為不及格,其餘輸出 及格。
.
例子:根據實際年齡按每10歲劃分年齡組
proc format;
invalue fage low-<40=30 40-<50=40 50-<60=50 60-high=60;
data age;
input id age fage.; /* 把age 與 fage 關聯起來 */
cards;
1 36
2 43
3 55
4 78
5 60
6 59
;
proc print;
run;
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNyZuBnL3kTMzETOyYTM0ADMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
.
例子:輸入一些固定又煩瑣的文本。輸入50名大學生所在的年級,分别是Freshman、Sophomore、Junior、Senior。
proc format;
invalue $grade 1="Freshman" 2="Sophomore" 3="Junior" 4="Senior" ;
value fscore low-<60="不及格" 60-<80="及格" 80-high="優秀";
data Dgrade;
input id Dgrade: $grade20. score; /* grade本身的寬度是1,但是 指定的輸入格式是Freshman、Sophomore、Junior、Senior,他們的寬度都至少>1,是以 要預定義夠大的 寬度 如grade20. */
format score fscore.; /* 把value 的fscore 關聯起來與 score,注意不要把proc format與 format 混淆了。 */
cards;
1 1 60
2 4 59
3 3 80
4 2 79
;
proc print;
run;
.
3.2 用picture 照個輸出模版
可以自己定義顯示結果,例如 在資料集中的 profit 顯示為 “¥” 的形式,把prop顯示為 “%” 的形式 。
proc format ;
picture pft low-high = "0,000,000"(prefix="¥");
picture pro low-high = "09.990%";
/*
pro的定義有0 有9,0的作用是自動舍去數字前面的0,而1-9不會舍去;
例如:0.72指定“00.00%”那會顯示成“72%”,“99.99%”會顯示成 00.72%,
“09.99%”則顯示0.72%;
low-high的範圍就是從最低值到最高值。
*/
run;
data profit;
input profit prop;
format profit pft. prop pro. ;
cards;
29893050 16.25
36580070 21.301
;
proc print;
run;