SAS 函數
SAS函數是編程語言的一個組件,可接受參數、執行計算或進行其他操作並返回值。返回值是字符型或數值型的結果,可用於賦值語句或 表達式中。SAS包含很多函數,也可以自定義函數。在BASE SAS軟件 中,SAS函數可用於DATA步編程、WHERE表達式、宏語言語句、 PROC REPORT和結構化查詢語言SQL(Structured Query Language)。
SAS函數的形式如下:
函數名(參數1 <, ...參數n>)
函數名(OF 變量列表)
函數名(參數 | OF 變量列表 | OF數組名{*} <..., 參數 | OF 變量列表 | OF數組名{*} >)
其中:
- ·函數名用於給出函數名稱。
- ·參數可以是變量名、常量或任何SAS表達式。多個參數間使用逗號(,)分隔。
- ·變量列表可以是任何形式的變量列表。多個列表之間使用空格分 隔。例如sum(of x y z)、sum(of x1-x10)、sum(x,of x1-x5y1- y5)、sum(x,of x1-x5,of y1-y5)。最后兩種表示方式具有同等效果。
- ·數組名{*}指在當前DATA步中已經定義的數組。
數值函數
字符操作函數
數值與字符轉換函數
1.PUT函數
PUT函數使用指定的格式返回值,可用於將數字值轉換成字符值。 其基本形式如下:
PUT(源, 格式)
其中,源為要進行重新格式化的常量、變量或表達式,可以是字符型或數值型。格式為要應用在源上的SAS格式。PUT函數可用於將數字 根據格式轉換為字符或將字符值轉換為其他字符。默認情況下,如果源 是數值型,結果字符串會向右對齊,如果源是字符型,則結果字符串會 向左對齊。也可以在格式中添加對齊標識-L、-C、-R分別表示左對齊、 居中或右對齊,改變默認對齊方式。格式必須與源的類型一致。也就是說,如果源是字符,格式名必須以$符號開始;如果源是數字,格式則不能以$開始。PUT函數不影響數據集中的變量格式或屬性。
子公司員工信息保存在saslib.employee2中,使用PUT函數對 Emp_ID的數值進行轉換,並創建新的字符型變量New_Emp_ID,同 時,使用DROP語句將原始變量Emp_ID刪除,之后再使用RENAME語 句將New_Emp_ID改名為Emp_ID。這樣,所生成數據集中包含的變量 名就會保持不變。該過程很容易理解,這里不再給出數據示例進行講 解。相關代碼如下:
data saslib.employee2; set saslib.employee2; New_Emp_ID=put(Emp_ID, best10.); drop Emp_ID; rename New_Emp_ID=Emp_ID; run;
2.INPUT函數
INPUT函數返回當SAS使用指定輸入格式轉換SAS值之后的結果。 其基本形式如下:
INPUT(源, 輸入格式)
其中,源為要應用輸入格式的字符常量、字符變量或字符表達式。 格式為要應用在源上的SAS輸入格式。
INPUT函數會將源的值使用指定的輸入格式進行轉換。INPUT函數 可用於將字符值轉換為數字值或其他字符值。輸入格式指定了結果是數 值型還是字符型。INPUT函數也不影響數據集中的變量輸入格式或屬性。
公司需要對員工入職日期進行排序,首先要將日期值(Date)轉換 為數字。這里使用INPUT函數,並使用輸入格式date9.將字符格式的日 期值(例如“01JAN2012”)轉換為該日期對應的數字進行存儲。代碼如 下:
data saslib.sales; set saslib.sales; Num_Date=input(Date, date9.); drop Date; rename Num_Date=Date; run; proc print data=saslib.sales noobs; run; proc contents data=saslib.sales; run;
與日期時間相關的函數
SAS提供日期(date)、時間(time)和日期時間(datetime)函數從日期、時間和日期時間值中得到年份、月份、日、小時、分鍾、秒等 信息,它們也可以將這些信息組成SAS的日期、時間和日期時間值。表3.13給出了SAS中常用的與日期、時間相關的函數。除此之外,SAS還 提供對日期的間隔進行操作的函數,詳細情況請參考SAS幫助文檔。
將公司員工入職日期中的年份、月份和日分別提取出來, 建立新的變量Year、Month和Day。
代碼如下:
data work.employee_ymd; set saslib.employee; Year = year(Entry_Date); Month = month(Entry_Date); Day = day(Entry_Date); run;