注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

零售创新,创新那些事儿,SPSS,VBA

零售创新

 
 
 

日志

 
 
关于我

新浪微博,零售创新 研究经理,数据分析师 希望和市场研究和零售业的同事共同进步! 本博客发表的都是免费或试用的资料,如果有版权问题请发邮件wangli12a@163.com联系删除。 spss excel vba blog

网易考拉推荐

通过示例学SAS(8)--数值函数与字符函数  

2013-08-30 10:41:00|  分类: SAS学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
通过示例学SAS(8)--数值函数与字符函数

原文地址:http://www.cnblogs.com/zgw21cn/archive/2008/08/22/1274213.html

常用的几个就不说了,拣几个不常用的说吧。

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.,等等。
  评论这张
 
阅读(465)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017