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中,将数据集和矩阵相互转化......
- 关于move tablespace的问题总结(r2笔记50天)
- 一些极度危险的linux命令(r2笔记49天)
- 挑战数据结构与算法面试题——80题全解析(一)
- 关于操作失误的数据修复(r2笔记48天)
- 挑战数据结构与算法面试题——80题全解析(三)
- 巧用rowid简化sql查询(r2笔记47天)
- 算法类面试题解析——美团2016校招:棋子翻转
- 算法类面试题解析——美团2016校招:最大差值
- 用Python进行机器学习小案例
- 启用ODM极速调优IO (r2笔记66天)
- 通过addm分析io问题(r2笔记64天)
- python爬虫+R数据可视化 实例
- 梯度下降优化算法综述
- 关于oracle后台启用的schedule job(r2笔记65天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- SAP CRM数据库表CRMD_SRV_REFOBJ和CRMD_SRV_OSSET
- 堆和栈的区别
- 用ABAP模拟JavaScript的柯里化语言特性(Curry)
- 使用ABAP并发编程解决一个实际应用场景中的性能瓶颈问题
- SAP Cloud for Customer Oberon视图里的Ruby Scrip
- 干了SAP开发这么多年,我都积累了哪些程序调试技巧
- 谈谈SOCKET
- 使用ABAP实现Mock测试工具Mockito
- 增强版本的自开发SAP WebClient UI Repository Information System
- 最大子序列和的问题的解(1)
- 10-STM32+ESP8266+AIR202远程升级方案-功能3-手机APP控制STM32远程更新固件程序,基于ESP8266
- 最大子序列和的接口函数(2)
- 最大子序列和的接口函数(3)
- 【剑指Offer】二叉树的深度
- 运行时间中的对数