You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SAS的PROC FCMP创建带可选参数的自定义函数?

关于PROC FCMP自定义函数可选参数的问题解答

首先明确说:PROC FCMP完全支持可选参数,只是你之前的语法用错了!FCMP里定义可选参数不能直接写symbols=0,而是要把可选参数放在所有必填参数的后面,并用DEFAULT=关键字指定默认值。

修正后的代码示例

你原来的代码只需要调整函数定义的语句,就能实现可选参数的效果:

PROC FCMP OUTLIB = fcns.functions.all;
    FUNCTION isNumeric(string $, symbols DEFAULT=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;

调用方式说明

修改后你可以两种方式调用这个函数:

  • 只传字符串参数,此时symbols会自动使用默认值0:
    data test;
        input str $20.;
        num_flag = isNumeric(str);
        datalines;
    1234
    -567
    12a3
    $1,234.56
    ;
    run;
    
  • 手动指定symbols参数的值,比如检查带符号的数值:
    data test2;
        input str $20.;
        num_flag = isNumeric(str, 1);
        datalines;
    $1,234.56
    789.00
    abc123
    ;
    run;
    

单函数 vs 两个独立函数的选择

完全推荐你用单函数带可选参数的方案,原因很简单:

  • 维护成本更低:不用重复写两套逻辑,后续要修改判断规则(比如新增支持的符号),只需要改这一个函数就行。
  • 用户调用更灵活:使用者可以根据自己的需求选择是否传递第二个参数,不用记两个不同的函数名(比如isNumeric和isNumericWithSymbols)。
  • 逻辑更统一:本质上这是同一个功能的不同模式,放在一个函数里更符合代码的聚合性原则。

如果遇到多个可选参数的场景,只需要把所有可选参数依次放在必填参数后面,每个都用DEFAULT=指定默认值即可。

内容的提问来源于stack exchange,提问作者ddavidd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:24:16