我想编写一个PROC FORMAT来检查作为唯一标识符的变量中的错误。变量是一个长度为16的字符串,它通常有许多尾随零,如下所示:
0000001234567890
我希望PROC向日志输出错误,例如,如果变量为null或者sting的长度与16不同。可以在同一个proc中完成,而不必通过函数如length()?
我想要获得的是:
proc format;
value $ id_error
' ' = _ERROR_
*length ne 16 = _ERROR_;
*other errors* = _ERROR_;
other = 'OK';
run;
使用单一proc格式可以使用与上述相同的东西吗?
答案 0 :(得分:0)
Reeza建议使用PROC FCMP
是我认为正确的道路。如果没有它,你无法真正检查长度。
文档here中对此进行了介绍。基本结构是,编写一个fcmp函数,它接受一个字符值作为输入(对于一个字符格式)并返回一个字符值,然后在格式中调用那个没有参数的fcmp函数;格式的输入值将自动提供。
在9.3 +:
data have;
length cardno $32;
input cardno;
datalines;
1234567890123456
0000153456789152
0000000000000000
1111111111111111
9999999999999999
0123456
01234567897456
0123154654564897987445
;;;;
run;
proc fcmp outlib=work.funcs.fmts;
function check16fmt(charval $) $;
length retval $16;
if length(charval) = 16 then retval='VALID VALUE';
else retval='_ERROR_';
return(retval);
endsub;
run;
options cmplib=work.funcs;
proc format;
value $chk16f
low-high = [check16fmt()];
quit;
data want;
set have;
format cardno $chk16f.;
run;