有没有办法使用允许可选参数的PROC FCMP
来创建用户定义的函数?
例如,我在SAS中编写了一个简单的udf来检查字符串是否为数字。
PROC FCMP OUTLIB = fcns.functions.all;
FUNCTION isNumeric(string $);
result = ifn(verify(string, " -0123456789") = 0, 1, 0);
RETURN(result);
ENDSUB;
QUIT;
现在,我想检查通常与数字相关联的符号,例如$
,,
和.
,但仅限用户指定。像这样:
PROC FCMP OUTLIB = fcns.functions.all;
FUNCTION isNumeric(string $, symbols=0);
IF symbols = 0 THEN
result = ifn(verify(string, " -0123456789") = 0, 1, 0);
ELSE
result = ifn(verify(string, " -0123456789$,.") = 0, 1, 0);
RETURN(result);
ENDSUB;
QUIT;
运行上面的代码会出错。我在网上搜索过,但一直无法找到任何内容。甚至可以选择参数吗?如果它们不是,那么创建一个具有两个必需参数或两个单独函数的函数会更好吗?我倾向于拥有一个功能,但我想我会打开这个问题。
答案 0 :(得分:2)
答案 1 :(得分:0)
不确定您在函数定义中尝试使用=0
,但这是导致它无法编译的原因。
376 FUNCTION isNumeric(string $, symbols=0);
-
22
200
ERROR 22-322: Syntax error, expecting one of the following: $, (, ), ',', DICTIONARY, DNARY, HASH, HITER, VARCHAR, [, {.
ERROR 200-322: The symbol is not recognized and will be ignored.
所以只需删除它。
proc fcmp outlib = work.functions.all;
function isnumeric(string $, symbols);
if symbols then
result = ifn(verify(string, " -0123456789$,.") = 0, 1, 0);
else
result = ifn(verify(string, " -0123456789") = 0, 1, 0);
return(result);
endsub;
quit;