SAS编程:使用EXCEL批量处理构建Format过程步语句

SAS编程过程中,会经常遇到调用Format的情况。有些Format是SAS自带的,例如,时间相关的Format,YYMMDD10.等(SAS自带Format可以参阅官方文档:SAS Help Center: Dictionary of Formats);有些Format是通过Proc Format自行定义的,例如上篇文章介绍Picture语句(SAS编程:通过Picture语句设置变量Format)。

自行定义Format的时,Value语句也比较常用,该语句创建的格式用于输出变量值对应的字符串。这里的变量值,可以是某个范围,也可以是某些具体的离散值。常见的应用,比如,SDTM编程时,建立--TESTCD对应--TEST的Format;频数分类汇总时,用数字替代各个类别进行分析,文字内容以Format的形式进行展示。

如果手动进行设置的话,设置格式越多,过程难免繁琐。比如,我要设置LBTESTCD对应LBTEST的Format。下图里有13个LBTESTCD,以前的做法是,在Format过程步里,先复制粘贴13个"" = "",然后将具体的LBTESTCD、LBTEST的值复制到语句中,过程简单而琐碎。

LBTEST

可以发现,这系列操作、展现形式是比较固定统一的,最后的展现形式为"RBC" = "Red blood cell count"。如果能做EXCEL中批量处理好成现成的一列,直接复制到SAS中,就方便快捷很多。这在EXCEL中是比较容易实现的。

不管是EXCEL小白,还是达人,大多数EXCEL使用者应该体验过,采用公式计算出一个单元格的值,然后下拉实现整列值的计算。现在回想起来,第一次使用EXCEL的下拉单元格实现批量处理时,真是惊喜激动啊。

除了数值计算,字符拼接也可以通过这样下拉的方式实现整列的批量处理。EXCEL中的拼接字符为&;拼接内容若为具体字符值,需要添加双引号;拼接字符为单元格内容时,直接输出单元格名称(在公式编辑的状态,单击目标单元格,就会输入该单元格名称)。比如,在RBC前,输入斜杠和空格,需要在单元格中这样编辑,="/ "&A1,然后按Enter键,斜杠和空格就显示出来。

Tmp1

然后,选中编辑好的单元格,鼠标定位到单元格右下角,按住下拉,就可以实现批量添加斜杠和字符。

Tmp2

对应SAS中Format语句的构建,输入这样的公式编辑,="""&A1&"" = ""&B1&""",不就可以实现我们想要的结果了?答案是,否定的。这里有一个小问题,拼接字符需要放在双引号内,但字符本身如果含有双引号,就会对原有引号内容造成干扰。上式公式编辑的结果,显示如下:

Tmp3

造成这样的结果是因为,在双引号内,连用两个双引号会抹去双引号的语法含义,显示成一个双引号。所以,正确的公式应该是这样,=""""&A1&""""&" = "&""""&B1&"""",所有想要显示的引号,都需要放在双引号中,并且输出字符本身需要连用两个双引号。这样处理后,再下拉单元格,就实现了整列的批量处理,之后在复制到SAS语句中。

Tmp4

SAS中也有类似的操作,例如,对于定义好的转义字符escapechar,连用2次就当成一个普通的字符;对于解析宏变量的&,连用2次也是会当成一个&来使用。

总结

文章介绍了,利用EXCEL批量处理生成SAS中Format过程步语句的方法,这其中涉及到EXCEL单元格公式编辑时,对双引号的处理。通过EXCEL的批量处理,降低工作的繁琐程度。这个方法也不局限在Format的语句中,对于大量格式统一的赋值语句,也可以使用EXCEL来编辑处理代码。

感谢阅读!若有疑问,欢迎评论区交流!

你可能感兴趣的:(SAS编程:使用EXCEL批量处理构建Format过程步语句)