数据集中的数据来源分为两种:

一、来自于另一个数据集;

二、来自于外部数据源(本文细说此来源);

无论是哪种来源,在它们成为目标数据集中的观测行(官方叫它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的那些事的更多相关文章

  1. 【腾讯Bugly干货分享】H5 视频直播那些事

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57a42ee6503dfcb22007ede8 Dev Club 是一个交流移动 ...

  2. CSharpGL(31)[译]OpenGL渲染管道那些事

    CSharpGL(31)[译]OpenGL渲染管道那些事 +BIT祝威+悄悄在此留下版了个权的信息说: 开始 自认为对OpenGL的掌握到了一个小瓶颈,现在回头细细地捋一遍OpenGL渲染管道应当是一 ...

  3. TODO:字节的那点事Go篇

    TODO:字节的那点事Go篇 (本文go version go1.7.3 darwin/amd64) 在Golang中string底层是由byte数组组成的. fmt.Println(len(&quo ...

  4. Microsoft Visual Studio 2013 — Project搭载IIS配置的那些事

    前段时间在改Bug打开一个project时,发生了一件奇怪的事,好好的一直不能加载solution底下的这个project,错误如下图所示:大致的意思就是这个project的web server被配置 ...

  5. OpenNLP:驾驭文本,分词那些事

    OpenNLP:驾驭文本,分词那些事 作者 白宁超 2016年3月27日19:55:03 摘要:字符串.字符数组以及其他文本表示的处理库构成大部分文本处理程序的基础.大部分语言都包括基本的处理库,这也 ...

  6. HTTPS那些事(一)HTTPS原理

    转载来自:http://www.guokr.com/post/114121/ 谣言粉碎机前些日子发布的<用公共WiFi上网会危害银行账户安全吗?>,文中介绍了在使用HTTPS进行网络加密传 ...

  7. 做一个 App 前需要考虑的几件事

    做一个 App 前需要考虑的几件事  来源:limboy的博客   随着工具链的完善,语言的升级以及各种优质教程的涌现,做一个 App 的成本也越来越低了.尽管如此,有些事情最好前期就做起来,避免当 ...

  8. Ctrl-A全选这点事(C#,WinForm)

    所有的文本框,不管单行多行都Ctrl-A全选就好了吧?是啊,很方便.Windows的软件基本都是这样.可为什么我们自己制作的WinForm就默认不是这样呢?谁知道呢,可能是WinForm饱受诟病,要改 ...

  9. 使用Bandwagon的VPS第一件事《FQ》

    说点闲话:昨天的长靴子到了,哎呀,今天那个高兴,踩着我的8厘米的过膝靴就出门上专业外语去了,扎了个麻花辫子,那个心情好哟,搞得我都不想继续学习linux平台上的C语言了,好想逛街----秀秀我的鞋子, ...

随机推荐

  1. 关于js中闭包的理解

    1.以前很不理解js中闭包的概念及使用,下面来看一下 function foo() { var a = 123; var b = 456; return function () { return a; ...

  2. 统计黑ip的脚本

    #!/bin/bash > ] do cd /var/openresty/nginx/logs#统计nginx日志,将结果重定向到文件blackip.txt中 cat access.log|gr ...

  3. 安装一些包管理的记录 win10

    我大php的composer 国内镜像包http://pkg.phpcomposer.com/  还是全局的爽些: omposer config -g repo.packagist composer ...

  4. golang gbk转utf8 mssql access

    package ms2mysql import ( "bytes" "golang.org/x/text/encoding/simplifiedchinese" ...

  5. MongoDB学习:(一)MongoDB安装

    MongoDB学习:(一)MongoDB安装 MongoDB介绍:     直接百科了: MongoDB安装: 1:下载安装: MongoDB安装:https://www.mongodb.com/do ...

  6. Window Server 2012 R2 下 IE11 浏览器 无法安装Flash 怎么解决

    不知道是不是我这个的系统的问题,不仅仅是图片有问题,Flash也有问题.用IE打开页面,一直提示安装,简直不胜其烦.尽管我有下载很多浏览器,但习惯了IE,所以也没想用其他浏览器代替IE. 刚开始我是点 ...

  7. Python之字符串小代码解析

    本篇只是拿一段代码来对python中的字符串的一些使用做解释,来让大家更加了解python Python 3.4.0 (v3.4.0:04f714765c13, Mar 16 2014, 19:25: ...

  8. .NET使用Com组件的一点点教训笔记~

    中控IFACE系列的产品,二次开发包 zkemkeeper.dll 在system32 ,SySWoW64都注册了,就是他妈的用不了. 最后,在 system32 ,SySWoW64 注册了,然后把需 ...

  9. 老男孩python自动化运维作业1

    #!/usr/bin/env pthon #字典操作三级菜单 “b”返回上一级菜单,“q”退出. menu={"BJ":{"cp":{1:1,2:2,3:3}, ...

  10. WPF Image控件的Source属性是一个ImageSource对象

    1.固定的图片路径是可以的,如下: <Image Source="../test.png" /> 2.绑定的Path是一个String类型的图片路径,而实际情况它需要的 ...