1.Missing(),如果變量有缺失值,則返回真。如
data test_miss;
set learn.blood;
if missing(Gender) then MissGender + 1;
if missing(WBC) then MissWBC + 1;
if missing(RBC) then MissWBC + 1;
if Chol lt 200 and not missing(Chol) then
Level = 'Low ';
else if Chol ge 200 then Level = 'High';
run;
當變量名形如x1-x5,可以調用missing(of x1-x5).此種寫法也可用於諸如sum等函數。
2.Ranuni.返回0到1的隨機數。若以0作為種子,SAS將以系統時間作為種子產生隨機數。
3.Lag返回前一個觀測值的函數。看下面的代碼
data look_back;
input Time Temperature;
Prev_temp = lag(Temperature);
Two_back = lag2(Temperature);
datalines;
1 60
2 62
3 65
4 70
;
得到結果為
Listing of LOOK_BACK
Prev_
Obs Time Temperature temp Two_back
1 1 60 . .
2 2 62 60 .
3 3 65 62 60
4 4 70 65 62
lag返回前一個觀測值,lag2將返回往前數兩個的觀測值,不是指兩個觀測值。呵呵。lag的一般作用為計算兩個變量的差值。將上例略微修改一下,計算兩天的溫度差。
data diff;
input Time Temperature;
Diff_temp = Temperature – lag(Temperature);
datalines;
1 60
2 62
3 65
4 70
;
當然更直接的用法是用Diff函數。
data diff;
input Time Temperature;
Diff_temp = dif(Temperature);
datalines;
1 60
2 62
3 65
4 70
;
4.Compbl:將字符串中兩個或兩個以上的空格刪除只剩一個空格(即 compress blank)。Compress刪除空格或指定的字符。
假設有一個名為電話號碼的變量,由於其來源的不同,導致格式多樣。
Phone
(908)232-4856
210.343.4757
(516) 343 - 9293
9342342345
現在想去掉左右括號,點號和-號。
data phone;
length PhoneNumber $ 10;
set learn.phone;
PhoneNumber = compress(Phone,' ()-.');
drop Phone;
run;
compress的參數稱為修飾語(modifier),各個修飾語的意思如下
d 刪除數字
a 刪除大小寫字符
i 忽略大小寫
k 保留字符串
s 刪除空格,制表符等
p 刪除標點符號
例如
函數 作用 返回值
compress(String,,'a') 刪除所有字符串 123
compress(String,,'kd') 刪除除數字外的其它字符 123
compress(String,'wxyz','i') 忽略大小寫刪除 wxyz 123
compress("A?B C99",,'pd') 刪除標點符號和數字 AB C
5.連接字符串。||或者!!將連接兩個字符串為一個字符串,其長度等於兩個字符串長度之和。比方說one=ABC,two=DEF,則one||Two將返回ABCDEF.
CAT函數等同於||,除了返回的字符串的長度以外,其缺省值是200.Cats函數在連接字符串前去掉字符串前面和后面的空格。Catx類似於Cats,在去掉前后的空格后,會在連接的兩字符串中間插入分隔符。下述代碼為其例子。
title "Demonstrating the Concatenation Functions";
data _null_;
Length Join Name1–Name4 $ 15;
First = 'Ron ';
Last = 'Cody ';
Join = ':' || First || ':';
Name1 = First || Last;
Name2 = cat(First,Last);
Name3 = cats(First,Last);
Name4 = catx(' ',First,Last);
file print;
put Join= /
Name1= /
Name2= /
Name3= /
Name4= /;
run;
輸出結果
Demonstrating the Concatenation Functions
Join=:Ron :
Name1=Ron Cody
Name2=Ron Cody
Name3=RonCody
Name4=Ron Cody
6.Find函數。其語法形式如下
find(string, find-string, modifiers, starting-position)
7.字符串拆分函數Scan.Scan函數提出以空格或標點符號隔開的第n個單詞。不同於trim,trim只是提取字符。
8.比較字符串函數Compare
9.模糊匹配函數Spedis.例如
data fuzzy;
input Name $20.;
Value = spedis(Name,'Friedman');
datalines;
Friedman
Freedman
Xriedman
Freidman
Friedmann
Alfred
FRIEDMAN
;
返回結果如下
Listing of FUZZY
Name Value
Friedman 0
Freedman 12
Xriedman 25
Freidman 6
Friedmann 3
Alfred 100
FRIEDMAN 87
當兩個字符串完全匹配時,將返回0.第一個字符匹配錯誤,將比其它字符匹配錯誤所得的處罰分數更大。
10.字符串替換
函數Translate會替換某個字符,而Transwrd會替換某個單詞。例如
data trans;
input Answer : $5.;
Answer = translate(Answer,'ABCDE','12345');
datalines;
14325
AB123
51492
;
得到結果如下
Answer
ADCBE
ABABC
EAD9B
Tranwrd經常用於標准化地址等,如以Street替換St.,以Road替換Rd.,等等