前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >IML的条件与循环 | 【SAS Says·扩展篇】IML:3.编程

IML的条件与循环 | 【SAS Says·扩展篇】IML:3.编程

作者头像
数说君
发布2018-04-04 16:05:51
1.4K0
发布2018-04-04 16:05:51
举报
文章被收录于专栏:数说工作室

【SAS Says·扩展篇】IML

分6集,回复【SASIML】查看全部:

  • 入门 | SAS里的平行世界
  • 函数 | 函数玩一玩
  • 编程 | IML的条件与循环
  • 模块 | 5分钟懂模块
  • 穿越 | 矩阵与数据集的穿越
  • 作业 | 编一个SAS回归软件

这是一段“资产收益率情景到评级情景的映射”的SAS程序,出自《金融计算与建模》(朱世武,282页):

代码中既用到了循环语句(do .. to ..),也用到了条件语句(if then),本文我们就来认识一下IML模块中的循环与条件语句。

点击查看上两节: 【SAS Says】扩展篇:IML(1):IML入门 【SAS Says】扩展篇:IML(2):函数


【SAS Says · 扩展篇】IML:条件与循环

1

IF-THEN 语句

IF-THEN语句,作为条件语句,虽然用法与其他语言没有什么区别,但是这里是用在矩阵上,那么就有很多方面需要注意。比如,

If a<b then statement.

这里的a和b是矩阵,那么请问,当我在比较a和b时,我在比较什么?

a<b,比的是a中的每个元素和b中相对应的元素,

if a<b,这个条件指的是a中所有元素都要小于b中所有元素,然后才会执行后面的语句,比如:

例子

proc iml; a={1 2, 3 -4}; b={1 -1, 0 1}; if a<b then print 1; else print 0; quit;

那么,假如我想把条件换成a中有任何一个元素小于b中相对应的元素,就执行后面的语句,该怎么写程序?很简单,加一个any函数:

例子

proc iml; a={1 2, 3 -4}; b={1 -1, 0 1}; if any(a<b) then print 1; else print 0; quit;

如果执行语句部分,有多条要执行的怎么办?和SAS base一样,用do来执行:

例子

proc iml; a={1 2, 3 -4}; b={1 -1, 0 1}; if any(a<b) then do; print 1; print a; end; quit;

记得要加end啊。

2

循环语句

(1)DO To BY

Do variable=start TO stop BY increment; Statement; End;

比如:

例子

proc iml; do i=10 to 100 by 20; print i; end; quit;

(2)DO WHILE

Do while (expression); Statement; End;

比如:

例子

proc iml; i=10; Do while (i<100); print i; i=i+30; end; quit;

(3)DO UNTIL

例子

proc iml; i=10; do until (i>100); print i; i=i+30; end; quit;

(4)用do语句导入数据

Infile ‘数据文件路径’; Do data; Input v1; x=x//v1; End;

比如,有一个数据文件testSet.txt

该文件在D盘下面,把它读入SAS的矩阵模块中,编程一个列向量。

例子

proc iml; infile 'D:\testSet.txt'; do data; input a; x=x//a; end; print x; quit;


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-12-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数说工作室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档