最近遇到一个问题,我觉得大家以后说不定都会遇到,所以在这分享给大家。
我们知道SAS变量名只能以下划线或者字母开头,然后由字母、数字、下划线组成。
但是最近在用proc glm,把统计量输出到数据集的时候,对应的变量名却是以数字开头,这是在运用统计模型的时候,SAS它就直接输出这样的变量名,也没有报错,重新打开SAS,再跑程序也没有问题,但是在batch ruu的时候,却提示不能采用这样的变量名。
下面见具体例子,以《sdtm-adam-pilot-project-master》里的ADVS数据集为例,计算两两比较的t值:
对应的程序是这样的:
对应输出统计量的数据集是这样的:
根据前面的说明,变量名是不能以数字开头的,但是log窗口里面也没有任何报错信息(先忽略那个自动画图的warning)
上面是在SASEG跑出来的结果,现在我们在SASbase里面试一下:
SAS base也没有报错,但是关键的问题来了,你肯定要对DIFF_pchg这个数据集里面的变量进行处理,好出report,但是在SASEG,你像下面这样处理数据集不会报错:
但是在SASbase却会报错
虽然说在SASEG里面你确实可以写成‘3’n这样的形式,但是首先这样就违背了SAS变量名的基本原则。如果是给DM出个报告,只要能输出正确的值就可以了,但是如果是递交给CDE,建议还是不要这样。
那么如何解决这个问题呢?
很简单,一个options就可以了。
options validvarname=v7;
这个系统选项的作用就是在SAS运行的时候,输出符合SAS规范的变量名
加上这个选项之后,输出上面的pdiff_pchg数据集,那个3就会自动变成_3,这样我们就可以在接下来的数据集对变量进行处理了。
大家还可以注意另两个选项,其中一个“any”,我看SAShelp的解释,就是如果你是options validvarname=any;那么我们刚才的'3'n就可以正常rename了,但是不建议大家这样,可能出现一些意想不到的结果。
好了,最后我们来处理那个warning,
其实这个warning应该是result窗口展示图形的时候有问题,我们为了省事,可以直接在程序前面加上ods all close;这样就不会在result 窗口输出统计结果。
如果后续我们需要查看其他统计结果,可以采用
ods result on;
ods result off;