5分钟看懂模块 || 数说 · 语言

时间:2022-05-06
本文章向大家介绍5分钟看懂模块 || 数说 · 语言,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

本文是【SAS Says】系列的扩展篇第四文,5分钟带您看懂IML中的模块功能,它类似于创建一个函数。

用20分钟玩手机,不如花5分钟跟Ansta学习SAS。

数说工作室 || 大数据 云计算 高逼格

【SAS Says】系列 主要介绍银行、证券、大型外企、药厂常用的统计软件SAS的使用。 1. SAS 软件入门 2. 读取数据 3. 描述数据 4. ODS的使用 5. 开发数据(一) 6. 开发数据(二) 7. SAS宏初步 8. 相关、回归等初步统计 扩展篇已经更新到第四文,直接点击查看前面内容: 【SAS Says·扩展篇】IML(1):初始IML 【SAS Says·扩展篇】IML(2):内置函数 【SAS Says·扩展篇】IML(3):条件与循环


【SAS Says · 扩展篇】IML(4):创建模块

这是“CIR模型利率期限结构拟合”中的一段代码,出自《金融计算与建模》(朱世武,367页):

注意用红色框框圈住的代码,是IML的模块功能,创建一个模块就像创建一个函数,你可以不断的进行调用。

今天将会结合例子,来认识一下模块功能。

1. 基本语句

创建模块的语句格式为:

创建模块 【SAS Says·扩展篇】

START 模块名;

模块语句;

FINISH;

创建完成后,可以进行调用,格式如下:

调用模块 【SAS Says·扩展篇】

方法一: RUN 模块名; 方法二:

CALL 模块名;

比如:

proc iml;

start a;
    x=1;
    print x;
finish;

call a;

quit;

结果如下:

模块还可以嵌套,一个模块中还可以嵌套一个子模块。

2. 不含参数模块和含参数模块

在非参数模块中,所有变量都是全局的,比如下面的例子,模块中的v,在全局也是通用的。

proc iml;

a=10;
b=20;
c=30;
d=90;

start mod2;
    v=100;
    c=25;
finish mod2;

run mod2;

print a b c d v;

quit;

但是一旦有参数,就不是全局的了,比如上面的程序稍微修改一下:

proc iml;

a=10;
b=20;
c=30;
d=90;

start mod2;
    v=100;
    c=25;
finish mod2;

run mod2(2,3);

print a b c d v;

quit;

log中就会给出提示:

ERROR: Matrix v has not been set to a value.

再举一个含参数模块的例子:

proc iml;

a=10;
b=20;
c=30;
d=90;

start mod2;
    v=x+y;
    c=25;
    print v;
finish mod2;

run mod2(a,b);

quit;

结果如下:

3. 函数模块

与一般的模块比,函数模块的特点在于可以返回一个单一值,模块中包含一个return的语句,它的语句格式为:

函数模块 【SAS Says·】

Start function(参数);

函数语句;

Return (返回值);

Finish function;

最后再看一个例子:

proc iml;

a=10;
b=20;

start sum(x,y);
    s=x+y;
    return (s);
finish sum;
c=sum(a,b);

print a,b,c;

quit;

结果是:

结束,恭喜你又学会一个新技能!下节介绍:

如何在SAS中,将数据集和矩阵相互转化......