用PROC FCMP创建函数

使用数据步骤语法创建自定义函数

语法:

OPTIONS CMPLIB=libref.table | (libref.table-1...libref.table-n)

PROC FCMP OUTLIB=libref.table.package; 
	FUNCTION function-name(arguments <$>)<$><length>;
	. . . 
	programming statements
	. . . 
	RETURN(expression); 
	ENDSUB; 
QUIT;

选项CMPLIB:指定存储函数包的表。是一个全局选项,设置此选项后,它将一直有效,直到取消、更改或退出SAS会话。

选项OUTLIB:指定存储编译函数的表和包。这是必须在PROC FCMP语句中指定的参数

FUNCTION语句:指定了函数名和函数参数,以及函数返回的是字符值还是数值
                             arguments:指定函数的一个或多个参数。通过在参数名称后面放置一个美元符号($)来指定字符参数。
                             <$>:指定函数返回一个字符值。如果未指定$,则函数返回一个数值。

举例:

proc fcmp outlib=certadv.functions.dev;        /* 1 */ 
    function ReverseName(lastfirst $) $ 40;    /* 2 */ 
        First=scan(lastfirst,2,',');           /* 3 */ 
        Last=scan(lastfirst,1,','); 
        return(catx(' ',First,Last));          /* 4 */ 
    endsub;                                    /* 5 */ 
run;

1、FCMP过程创建自定义函数。选项指定certadv.functions作为存储开发包的表。开发包是具有唯一名称的例程的集合。

2、FUNCTION语句将函数名指定为ReverseName。ReverseName是一个自定义函数,它有一个名为LastFirst的字符参数,并返回长度为40的字符值。如果没有指定返回值类型和长度,则默认为数值,长度为8。

3、函数体由数据步骤语法组成。赋值语句创建了两个新变量,First 和 Last,它们是使用SCAN函数创建的。
First 使用SCAN函数返回LastFirst变量中的第二个单词,First 返回LastFirst变量中的第一个单词。

4、RETURN语句指定了ReverseName的值。RETURN语句定义函数返回的值。它使用CATX函数将在函数定义中创建的第一个和最后一个变量值连接起来,变量值之间用一个空格分隔。

5、endsub语句,函数结束语句;

举例:

proc fcmp outlib=certadv.functions.dat; 
    function MyQuarter(month);        
        if month in(2,3,4) then myqtr=1;  
        else if month in(5,6,7) then myqtr=2; 
        else if month in (8,9,10) then myqtr=3; 
        else myqtr=4; 
        return(myqtr);      
    endsub;      
run; 

options cmplib=certadv.functions;        
data work.dates;                         
    do Dates='15JAN2019'd to '31DEC2019'd by 30; 
        MonNum=month(Dates); 
        FiscalQuarter=MyQuarter(MonNum);    
        output; 
    end; 
run; 

proc print data=work.dates;     
    format Dates mmddyy10.; 
run;

 

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Miya_o00

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值