前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SAS-令人耳目一新的几个any函数...

SAS-令人耳目一新的几个any函数...

作者头像
Setup
发布2019-10-20 17:52:04
2.8K0
发布2019-10-20 17:52:04
举报

今天在想我要写啥呢,写啥呢....然后有朋友给我推荐了一个很有意思函数...为啥说这几个函数很有意思呢,因为是一个系列的,可以实现一个类似的特定功能...小编以前也没有留意过,看到了这几个函数,也是眼前一亮,感觉也挺好玩的。

几个有趣的函数

讲一个道理,

如何学习SAS编程呢,那就是看别人写的代码,凡是没有见过的语法句式都要去百度一下,

往往就有意想不到的收获,“不积跬步无以至千里,不积小流无以成江河”,这个就是积累。百尺竿头想更进一步却总是无从下手,最好办法就是交流,程序员之间的交流我想更多的应该体现在代码上~我想我就直接上代码与结果就是就好的交流方式,有兴趣的可以自己查SASHELP,粗略的在代码后面加了注释,具体还是建议看看书...

代码语言:javascript
复制
data anywhere;
input String $char20.;
Alpha_num = anyalnum(String);/*查找字符串 从左至右  第一个出现 数值或字母(不分大小写)的位置*/
Alpha_num_9 = anyalnum(String,-999);/*查找字符串 前999个字符长度,从右至左  第一个出现 数值或字母(不分大小写)的位置*/
Alpha = anyalpha(String);/*查找字符串 从左至右  第一个出现 字母(不分大小写)的位置*/
Alpha_5 = anyalpha(String,-5);/*查找字符串 前5个字符长度,从右至左  第一个出现 字母(不分大小写)的位置*/
Digit = anydigit(String);/*查找字符串 从左至右  第一个出现 数值的位置*/
Digit_9 = anydigit(String,-999);/*查找字符串 前999个字符长度,从右至左  第一个出现 数值的位置*/
Punct = anypunct(String);/*特殊符号*/
Space = anyspace(String);/*查找字符串 从左至右  第一个出现 空格 的位置*/
Up = anyupper(String);/*查找字符串 从左至右  第一个出现 字母(大写)的位置*/
Low = anylower(String);/*查找字符串 从左至右  第一个出现 字母(小写)的位置*/
datalines;
Once upon a time 123
HELP!
987654321
UPPER and lower
;
run;

然后再来看看上段代码运行的结果...

一个语法...

一个小语法...最近有朋友问我retain用法,我想了一想,我好想之前没有写retain也好想写过,最近脑子不好使了,记不太清了...所以还是在简单的写一写... retain可以干嘛呢?retain常见用法有俩种,一种调整变量顺序,一种作为观测与观测之间变量值的传递。至于其他的用法,小编好像好没用过,所以也就姑且只说这俩种用法...

首先来看看如何调整数据集变量的顺序(这里同length/format/informat声明语句类似)...写在Set语句之前.

代码语言:javascript
复制
data class;
  retain sex name;
  set sashelp.class;
run;

不难发现这个时候Sex就出现在第一列了,也就是Sex这个变量的Varnum=1了。retain在这里也就是起到一个改变变量顺序的作用...接下来看另外一个作用,观测之间值的传递...还是先看一段代码与效果,比较明显....

代码语言:javascript
复制
proc sort data=sashelp.class  out=class  sortseq=linguistic(numeric_collation=on);by  sex ;quit;
data class1;
  set class;
  retain  age_sum sum_tt;
  by sex;
  if first.sex then do;
  age_sum=age;
  sum_tt=cats(age);
  end;
  else do;
  age_sum+age;
  sum_tt=catx('+',sum_tt,age);
  end;
  symbol=catx('=',age_sum,sum_tt);
run;

那就与小编来剖析一下这里的retain的俩个变量,为什么会生成这样的结果...还是先看retain的俩个变量之一的SUM_TT。看下方截图部分有简单的文字叙述,这个东西呀,还是自己多运行代码多尝试就理解了...

在来看一个简单的例子,Retain实现一个填补...从左到右的填补...

代码语言:javascript
复制
data b;
set a;
retain x1 ;
if ^missing(x) then x1=x;
else x1=x1;
x=x1;
drop x1;
run;

大概就这么多了...

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SAS程序分享号号号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档