SAS-函数(一),总把新桃换旧符

这同样是一篇很很很很基础的SAS分享,最近小编有好些朋友都打算开始学习一下SAS,所以这也是送给那些不是从事写SAS的职业仍要自力更生写SAS的朋友们...最近发现了一个规律,文章越长越没人看,所以啊我要将这个拆成好几次发...

第一部分

做为一个曾经写了30+临床项目的数据清洗的SAS程序的小编打算本文将围绕数据清洗中的SAS函数应用展开。当然文中涉及的到例子SAS实现的方法很多可能并非是最佳方式,只是为了引出函数的使用方式…

小编以前见过很多data validation plan都会有核查某一些数据点填写规范性的问题,当然由于近年EDC的普及使用,现在基本上很少用SAS写核查程序了,但是不妨碍我们举出一些例子,引入SAS函数来实现一些需求,如:找出受试者姓名缩写不为4位大写英文字母...(见下code,引入Length、compress函数)

length

length函数的用法其实很简单,字面意思也是长度的意思,返回的是该变量对应观测的长度,并非变量的属性的长度。

comperss

compress函数,是SAS中最最最最常见的函数之一!也是一个功能很强大的函数,针对字符的操作,可以保留字符串,可以消除字符串等等...具体用法可以看SAShelp...此处compress(subjinit,'','uk'),k是保留的意思,u是大写的字母的意思,这样的写的效果就是保留字符串中的大写字母...小编刚学SAS做了一些笔记,现在已经忘记从那本书还是从哪个博客上备份下来的,列了一些参数,仅供参考,可能有错误~小编也记得每个参数的意思,只几个常用的,然后用的时候查笔记或者看SAShelp...

在数据清洗转换过程中,经常会遇到多个变量、字符串进行连接,比如:将中心编号与受试者编号以‘-’的方式连接起来,生成受试者唯一编号的,此处的写法太多了..且来看几种常见的写法。

CAT、CATS、CATT、CATX

在这里引出了连接函数,SAS中字符串连接方式很多,此处小编仅以常见的连接方式为例。

CAT函数有一个系列吧,CAT,CATX,CATS, CATT…看到这么多CAT有没有眼花缭乱,那么来看看:

CATX消除首位空格以参数连接符连接;CATS消除首位空格进行顺序连接;CATT删除连接的尾部空格进行连接;CAT不进行操作直接连接;

strip、left、right、trim

在来看看Strip函数,其作用是消除首位空格,起到连接作用的是“”符号,那么类似strip函数的还有哪些呢,小编目前常见的有left、right、trim;

分别的含义是:left消除左边空格;right 消除右边空格;trim消除尾部空格;

这个时候在会头去看看cats、catt函数,这里的后缀S/T,其含义就不言而喻了,分别对应的strip/trim。仅小编个人观点…

在SAS编程过程中,经常遇到需要判断一个字符串是否包含某特定字符的操作,实现的方法有很多;例如:“蘑/菇/是/一/个/小/、/东/西“ ,如何用程序来判断这个字符串里面包含了’、’这个符号呢,(这个例子来源于一条群消息,一群大佬在讨论SAS中的K函数).那么就来看看此处该如何实现。

kindex、index、indexc

看到Kindex,是否有疑问,index是索引的意思,为什么前面要加一个K呢?这个问题小编也不能很好的回答,只能粗略的知道一点因为中文在SAS中是以双字节的形式存在的,K大头的函数就是为了一些编码相似度高的识别错乱的情况。Index返回的特定字符在字符串中从左到右的位置(一个数值).接下来来看看之前大佬们讨论的内容,当初本来打算写“一条群消息引发的思考(三)”但是由于“一条群消息引发的思路(二)”阅读并不理想,所以这个地方就一直没写...

关于SAS底层的编码小编也是不懂了,所以就不继续深入这些了,在针对双字节的时候还是用K函数要好...那么就来看看另外的index,indexc,其实小编用的不太多,刚学SAS的时候从function那本书上找了一点例子做了一个写笔记,就直接贴图了,更多还是请看function那本书,或者SAShelp搜索index...

find、findc、findw

Find也有一个系列(findc、findw),看到这儿是不是发现SAS中函数都很有特色,很容易就是一个系列的出来….其实吧,find函数和index函数很像,返回的也是一个位置,但是吧,这个是没有kfind函数的存在的…这个例子并没有体现index、find函数在范围特定字符串位置的妙用,那么久在来看一个例子:比如我们在利用pipe得到文件名称的时候,去掉后缀...

看到上面的代码,为什么我这里find用一个-200的参数呢,find(fname,'.',-200);这个-200代表的什么意思呢?我想其实很多人都知道,但同样有很多人都不知道,小编这是这样理解的,-200得拆开来解释,200表示从左到右200个字符长度,‘-’表示从这个200个长度从右到左第一次出现的位置。

那么就来看看find、findc、findw的用法(从function书中摘抄出来的),更多相关用法还是看书好。

其实一个字符串中包含某些特定字符,常规方法并不这样写,那么现在顺便看一下常规方法。

substr

回到前面的那个例子(ef=substr(fname,1,uf-1)),这里出现了substr,这个函数是干什么的呢?substr是字符串截取的意思,此处是将fname下面的观测,从第1个字符开始,截取的长度是uf-1。这个是很简单的。

Scan、kscan

看到scan和Kscan,是不是觉得有点眼熟,在说kindex的时候引用的俩条群消息的截图里面,就正好有Kscan的例子(K开头的函数大部分是一样的针对双字节的一种措施),先来说scan,字面意思就扫描。获取某特定字符的第一部分,第二部分....来是以日期的那个为例子。

说了好几个函数了,感觉是时候到一波练习的时候了...

小编有一句话:

%let varlist=填写要成列的变量1\变量的标签1\二级标签的识别号1\二级标签1填写要成列的变量2\变量的标签2\二级标签的识别号2\二级标签2 ;

想要让其变成这个样子的的结构:

该怎么实现呢?用刚刚的函数?好吧,还是直接看代码吧。

Count

看上面的例子,有没有看到Count函数,是的上面的例子就是为了引出Count函数,Count函数是一个很好的函数可以计算某特定字符、字符串在一个字符串中出现的个数...例子小编就不再举了,上面就是一个很好的例子,更多还是看SASHELP...

在数据处理过程中,一般都会遇到缺失日期,缺失日期如何填补呢,一般SAP里面都有规定,常见的月缺失补07,日缺失补15...突然发现这个例子好像与我小说的函数不太合适,那就假装月缺失填NK,日缺失填UK..(.其实一般不是这样的)

tranwrd

tranwrd通过前面的那个例子,作用已经不言而喻了,很简单吧,是的,很简单...替换字符用的...

今天就这么多了~敬请期待下一部分~

如果觉得好或者公众号有价值:请打赏我把~

打赏包括但不限于:转发,分享,推荐,赞赏本公众号或者文章,谢谢!为我的“万粉计划”舔砖加瓦吧~

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180206G1CK0O00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券