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

2019-10-20 17:52:04 浏览数 (1)

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

几个有趣的函数

讲一个道理,

如何学习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;

大概就这么多了...

0 人点赞