【发布时间】:2018-05-11 20:02:36
【问题描述】:
有没有办法使用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;
运行上面的代码会报错。我在网上搜索过,但找不到任何东西。可选参数甚至可能吗?如果不是,最好创建一个带有两个必需参数的函数,还是创建两个单独的函数?我倾向于拥有一个功能,但我想我会提出这个问题。
【问题讨论】:
-
PROC FCMP 文档是怎么说的?通常要确定一个字符串是否是一个数字,你可以用 COMMA 信息读取它,如果它返回非缺失,你就很好。负责 1.4E5 之类的事情。
-
错误信息是什么?它没有编译吗?还是在你尝试使用的时候出错了?
-
@tom 当我尝试编译(可能不是正确的词)函数时,它给了我
Syntax error, expecting one of the following: $, (, ), ',', HASH, HITER, [, {.但我认为@allan 是正确的,他们只是不允许这样做,用数组参数的“异常”。 -
@data_null_,感谢您的提示,我会记住的。虽然这实际上只是一个示例函数,所以我可以掌握在 SAS 中创建 udf 的窍门。
标签: sas user-defined-functions