关于PDV的那些事
数据集中的数据来源分为两种:
一、来自于另一个数据集;
二、来自于外部数据源(本文细说此来源);
无论是哪种来源,在它们成为目标数据集中的观测行(官方叫它observation)之前都要进入PDV,先成为准观测行。
这里可以形象的把PDV 看作一个数据容器,在该容器中的数据即将成为目标数据集中的观测。先来一段小程序如下:
OPTIONS USER=TEMP LS=MAX PS=MAX NOCENTER;
DATA A;
INPUT X1 X2;
CARDS; .
.
;
RUN;
DATA B C D;
IF _N_= THEN OUTPUT B;
IF _N_= THEN OUTPUT C;
SET A;
IF _N_= THEN OUTPUT D;
Y=X1+X2;
RUN;
PROC PRINT DATA=A;
RUN;
PROC PRINT DATA=B;
RUN;
PROC PRINT DATA=C;
RUN;
PROC PRINT DATA=D;
RUN;
运行一段代码可以分两个阶段:编译阶段和执行阶段。而PDV这个容器的建立就是在编译阶段了,上面这段程序编译时就创建好了PDV容器,而在PDV成型之前就现在当前的DATA步里面搜索存在的变量(包括SET语句中数据集的变量),同时也获取每个变量的类型,长度等。继而PDV会存好每个变量的名称,并预留存放数据的空间。
在第二个DATA步中的PDV为:

其中_N_和_ERROR_是两个自动的变量,在存入目标数据集后会自动消失,_N_记录当前的记录条数,_ERROR_标记当前有无错误字段。
以上为编译阶段,下面是执行阶段。
在执行一开始,就为PDV各空间进行赋值,制为:

因为是第一条准观测,所以其中_N_为1,开始默认没有错误,所以 _ERROR_为0,其余的个变量值通通置为MISSING状态值。
代码中的B数据集由于还没走到SET步就被输出,所以变量都还没有赋值,所以B数据集中只有一条观测值,并且都为空 ,如图:

程序继续走到IF _N_=2步满足条件,继续走到SET语句,给X1 X2赋值,走到IF _N_=1这条语句,此时PDV状态为如图:

故数据集D输出为:

然后走到Y运算语句,继而给Y进行赋值,此时PDV状态为如图:

走到下一步到RUN语句,由于前面程序中出现了OUTPUT语句,所以在RUN语句执行时,不输出。
然后到了第二轮执行了。进入DATA步,_N_置为2,_ERROR_先置为0,而,SET数据集中出现的变量值不变(自带RETIAN功能!!!),然而DATA步中新建的变量要被置为MISSING状态,所以此时PDV状态为:

说明此状态是还没有走到SET语句时的状态!还仅仅是第二轮的初始状态,走到了IF _N_=2时,C数据集的输出结果为:

走到SET语句时PDV中内容替换了X1,X2的值为:3 4。PDV的状态为:

当执行到Y运算时Y的置才有MISSING 值替换为7,PDV为:

接下来一次类推。
注意,SET数据集中的字段有自带的RETIAN功能,而DATA步中新建的变量PDV都会认为初始值为MISSING值。
说到PDV,还有一点关于PDV的应用,first.X1
OPTIONS USER=TEMP LS=MAX PS=MAX NOCENTER;
DATA A;
INPUT X1 X2;
CARDS; .
;
RUN;
PROC SORT;
BY X1 X2;
RUN;
DATA B;
SET A;
BY X1;
IF FIRST.X1;
RUN;
PROC PRINT;
RUN;
以上的代码中,因为DATA步中出现了BY语句,所有PDV会总动在末尾创建两个临时变量名为:FIRST.X1和LAST.X1。若当前观测是以X1变量一组中的第一条观测时,FIRST.X1置为1否则为0。LAST.X1同理,如当前观测为一组中的最后一个观测则置为1,否则为0。可想象所有PDV合起来是如下图所示的:

DATA步中有IF语句筛选FIRST.X1为>0的观测,所以执行结果如下:

关于PDV的那些事的更多相关文章
- 【腾讯Bugly干货分享】H5 视频直播那些事
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57a42ee6503dfcb22007ede8 Dev Club 是一个交流移动 ...
- CSharpGL(31)[译]OpenGL渲染管道那些事
CSharpGL(31)[译]OpenGL渲染管道那些事 +BIT祝威+悄悄在此留下版了个权的信息说: 开始 自认为对OpenGL的掌握到了一个小瓶颈,现在回头细细地捋一遍OpenGL渲染管道应当是一 ...
- TODO:字节的那点事Go篇
TODO:字节的那点事Go篇 (本文go version go1.7.3 darwin/amd64) 在Golang中string底层是由byte数组组成的. fmt.Println(len(&quo ...
- Microsoft Visual Studio 2013 — Project搭载IIS配置的那些事
前段时间在改Bug打开一个project时,发生了一件奇怪的事,好好的一直不能加载solution底下的这个project,错误如下图所示:大致的意思就是这个project的web server被配置 ...
- OpenNLP:驾驭文本,分词那些事
OpenNLP:驾驭文本,分词那些事 作者 白宁超 2016年3月27日19:55:03 摘要:字符串.字符数组以及其他文本表示的处理库构成大部分文本处理程序的基础.大部分语言都包括基本的处理库,这也 ...
- HTTPS那些事(一)HTTPS原理
转载来自:http://www.guokr.com/post/114121/ 谣言粉碎机前些日子发布的<用公共WiFi上网会危害银行账户安全吗?>,文中介绍了在使用HTTPS进行网络加密传 ...
- 做一个 App 前需要考虑的几件事
做一个 App 前需要考虑的几件事 来源:limboy的博客 随着工具链的完善,语言的升级以及各种优质教程的涌现,做一个 App 的成本也越来越低了.尽管如此,有些事情最好前期就做起来,避免当 ...
- Ctrl-A全选这点事(C#,WinForm)
所有的文本框,不管单行多行都Ctrl-A全选就好了吧?是啊,很方便.Windows的软件基本都是这样.可为什么我们自己制作的WinForm就默认不是这样呢?谁知道呢,可能是WinForm饱受诟病,要改 ...
- 使用Bandwagon的VPS第一件事《FQ》
说点闲话:昨天的长靴子到了,哎呀,今天那个高兴,踩着我的8厘米的过膝靴就出门上专业外语去了,扎了个麻花辫子,那个心情好哟,搞得我都不想继续学习linux平台上的C语言了,好想逛街----秀秀我的鞋子, ...
随机推荐
- Redis基础(转)
ServiceStack.Redis实践 Redis的C#客户端我选择的是ServiceStack.Redis,相比Booksleeve redis-sharp等方案,它提供了一整套从 Redi ...
- [2015hdu多校联赛补题]hdu5384 Danganronpa
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5384 题意:函数f(A, B)定义:A.B为字符串,f(A, B)为A中有多少个不同的B(ex:f(& ...
- C语言调用curl库抓取网页图片(转)
思路是先用curl抓取网页源码,然后以关键字寻找出图片网址. 范例: #include <stdio.h> #include <stdlib.h> #include < ...
- Arguments Optional
function add() { //return false; if(typeof arguments[0] !== "number" || arguments.length & ...
- PHP读取Excel数据写入数据库(包含图片和文字)
public function test(){ $exts = 'xlsx'; //导入PHPExcel类库,因为PHPExcel没有用命名空间,只能inport导入 import("Org ...
- jQuery Mobile 表单输入元素
jQuery Mobile 文本输入 输入字段是通过标准的 HTML 元素编写的,jQuery Mobile 会为它们设置专门针对移动设备的美观易用的样式.您还可以使用新的 HTML5 <inp ...
- asp.net web api集成微信服务(使用Senparc微信SDK)
/// <summary> /// 微信请求转发控制器 /// </summary> [RoutePrefix("weixin")] public clas ...
- 使用guava进行对字符串的加锁
java的synchronized关键字是堆某对象加锁,但是我们当需要对某个字符串加锁怎么办 比如对同一个订单只能有一个操作,但是对其他订单的操作不影响 使用 guava包下的 Interner 类 ...
- IT人 转型
IT人 转型 转自: http://blog.sina.com.cn/s/blog_88534dff0101232b.html “35岁,技术生涯即告终结.”这种说法在it界得到众多人认可, ...
- 百度地图API 与 jquery 同时使用时报 TypeError $(...) is null错误 失效的原因及解决办法
在引用百度地图API后,发现jquery 根据id 找不到 form.但是对于别的控件没有问题. 在排除了 html加载的问题后. 上网查找 发现以下解决办法: 原因应该是有冲突的插件. 解决办法将 ...