SAS' DATA STEP内部逻辑

SAS data step 包含两个阶段,编译和执行阶段,具体流程如下:
此图为sas data 步的流程图

一般来讲,SAS DATA Step处理的第一阶段是编译阶段,主要执行以下任务:
1.自动将SAS语句转换为稍后要执行的机器代码
2. 标识变量的类型以及长度
3. 确定后续的引用是否需要对变量进行类型转化
4. 若存在外部的input语句,则创建输入缓冲区
5. 创建程序数据向量(PDV)
6. 创建数据集和变量的描述性信息
7. 执行语句,但仅限于编译;给编译器如何开始提供相应的信息:DROP,KEEP,RENAME,RETAIN,WHERE,LABEL,LENGTH,FORMAT,ARRAY,BY,ATTRIB
8. 创建自动变量:N,ERROR,END=,IN=,FIRST,LAST,POINT=
第二阶段是执行阶段:
1.从data语句开始,并将_N_变量设置为1(每第二代一次DATA步,_N_加1)。
2. 在PDV中将变量值设置为缺失
3. 使用Input 语句将数据记录读入缓冲区(如果读取原始文件)
4. 使用以下语句之一从SAS数据集读取SAS观察结果:set,merge,modify,update
5. 执行data步内的语句
6. 将观测写入OUTPUT 的数据集(data null 除外)
7. 返回至data 语句
8. 每次迭代都会重复所有操作,直到达到输入文件的末尾
9. 如果DATA Step 不包含输入记录的读取,则默认情况下仅执行一次。
10.上述的默认执行顺序可以通过IF-THEN-ELSE 改变

SAS参考教程中将PDV定义为:“PDV是内存中用来创建数据集的逻辑区域,每次只涉及一条观测值。当程序执行时,SAS从输入缓存区中读入数值或通过执行SAS语句创建数值。数据值赋给PDV中一个合适的变量。SAS将该数值作为一条观测值写入SAS数据集。”

例:

data example1;
put "after compile before execution:"_all_;
x = "hello";
y = "world";
n = 5;
m = n * 2;
put "at end of execution:" _all_;
run;

编译阶段创建的PDV 如下:

xynm_N_ERROR
..10

在data 步结束后,PDV如下:

xynm_N_ERROR
helloworld51010

只有一条记录输出道example1 数据集中,N,_ERROR_为临时变量,在输出时设置为MISSING.

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据分析,数据科学及AI算法是当前最热门的职业。这些职业有着共同的特点:面向数字的,针对编程的以及采取分析手段的。 这些当代热点特性使得在就业市场上对以上职位需求激增也就不足为奇了。但是,市场上提供这方面的大型综合的培训课程是有限,如果说有,大多是知识范围狭窄且非综合性的,而且大多培训都缺乏方法论与实务结合。一般的情况是讲师讲述某种语言的一堆代码,学生听完后甚至连使用方法及代码的前提都不清楚,更别提实际应用场景了。这里,掌握一门数据分析软件本身没错,但仅通过单一的编程培训很难获得聘用为数据分析师或数据科学家所需的技能。那我的解决方案是什么呢?首先,我把所有数据分析中的典型问题都归类总结出来,再结合相应的实际问题,数据以及案例,同时采用世界上最流行的两种数据分析软件:PYTHON 和 SAS去解决这些问题,并将这些解决方法传授给学生。学生在完成培训后更重要的收获是知道每一问题从产生直至解决的前因后果和应用场景,这是因为我在每一课程章节最前都会交代方法论,知识要点及应用场合。SAS和PYTHON可以一起学吗?当然可以。因为我就是这样做到的。具体步骤是,我在课程当中安排了一系列主题,然后使用两种编程语言解决同样的问题。我总结出这样做的好处是边学习边比较,最后在不知不觉当中掌握了两门语言的精华和数据分析的通用方法或模式。过程虽有点长,但十分有趣。最后,为了巩固已学的知识和技能,我还专门安排了针对PYTHON 和 SAS的中小型项目及详细代码讲解。另外,课程当中使用的全部编程代码及数据文件都将免费地提供给注册的学生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值