SAS 函數


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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM