今天在想我要写啥呢,写啥呢....然后有朋友给我推荐了一个很有意思函数...为啥说这几个函数很有意思呢,因为是一个系列的,可以实现一个类似的特定功能...小编以前也没有留意过,看到了这几个函数,也是眼前一亮,感觉也挺好玩的。
几个有趣的函数
讲一个道理,
如何学习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;
大概就这么多了...