对于初学SAS的人来说,在处理数据的时候,经常会遇到一些“不寻常”的处理。
例如,我们在将数据从字符型转换成数值型时,一般会这样处理:
a=input(b,best.)
但是有时候我们会看到有这样的写法:
a=input(b,??best.)
这里的问号的作用是什么呢?下面我就将通过实例带你们了解问号的作用。
第一步:输入数据。
data test;
input id score $;
cards;
01 96a
02 67
03 89c
04 58
05 99
;
run;
第二步:将变量score转换成数值型。
data test2;
set test;
score2=input(score,best.);
run;
可以看到对于不规范的数据,SAS将值变为空,同时log中报错,这在项目中是不允许的。
第三步:在input中加入问号。
对于无效的数据,SAS将值转换为空值,同时log中并没有报错。
data test3;
set test;
score2=input(score,??best.);
run;
从上面的例子中我们可以看出,??的作用就是将无效的数据转换为空值,同时不会在log窗口输出错误信息。不管是在将字符型数据转换为数值型还是说日期转换的时候,用??都能防止出现那种状况。
其实还有只用一个?的情况,但是我觉得和不输入问号的结果都是一样的,还会报错,只是报的错误不一样罢了。具体的你们自己可以去试试。下面附上?和??的英文解释:
? modifier suppresses the invalid data message.
?? modifier also suppresses the invalid data message and prevents setting _error_ to 1 for invalid data.
在实际应用中,适当运用这种方法能有效防止log报错,因为当我们从DM那获取的数据,有时候可能是“脏数据”。至于要不要将数据转换为空值,要根据具体项目而定。