请选择 进入手机版 | 继续访问电脑版
楼主: pobel
44124 90

[学习分享] 关于PDV的总结   [推广有奖]

院士

14%

还不是VIP/贵宾

-

威望
2
论坛币
14673 个
通用积分
3462.8973
学术水平
933 点
热心指数
931 点
信用等级
730 点
经验
113854 点
帖子
1287
精华
4
在线时间
3645 小时
注册时间
2008-12-10
最后登录
2024-2-28

初级热心勋章 中级热心勋章 初级信用勋章 初级学术勋章 中级信用勋章 中级学术勋章 高级热心勋章 高级学术勋章

pobel 在职认证  发表于 2013-4-12 10:22:19 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

以下是个人对PDV的粗浅总结,希望各位高手补充指正。


什么是PDV


个人认为可以把PDV想象成一排用于存放变量值的盒子。每个盒子代表一个变量。


提交一个DATA步后,SAS会对这个DATA步进行编译,然后执行。


首先,PDV是在DATA步的编译阶段生成的。(编译会进行语法检查并创建一排整齐摆放的”盒子”);


然后,在DATA步的执行阶段,根据不同语句对PDV中变量的值进行清空或更改。(将盒子清空或换上新的物品);


最后,在RUN;语句或者OUTPUT;语句将PDV中变量的当前值输出到目标数据集中。KEEP,DROP语句或KEEP=,DROP=数据集选项会影响输出到目标数据集中变量的个数。(如果没有KEEP/DROP,将新建变量和数据集变量对应的盒子搬出到目标数据集;如果只有KEEP,则只搬KEEP指定的盒子;如果只有DROP,则不搬DROP指定的盒子;如果KEEP/DROP同时存在,则只搬KEEP-DROP后剩下的盒子

PDV中变量的个数及顺序


DATA步中所涉及到的所有的变量,包括新创建的、从其他数据集读取的(SET)、以及自动生成的变量。自动生成的变量包括:_ERROR_,_N_; 或是FIRST.VAR,_IORC_等由某个语句或选项所自动产生的变量。默认情况下,自动生成的变量不会输出到目标数据集中。


PDV中变量按照先来后到的原则,是根据其在DATA步中第一次出现的位置决定整个PDV中的变量顺序。同样,这是在DATA步的编译阶段确定的。(在SET语句中,数据集选项IN=所指定的变量会在数据集变量之前)PUT _ALL_; 语句会将PDV中所有的变量按照其在PDV中的顺序输出到log中。

例如下面这个例子:

  data test;     
          aaa=1;   
          set sashelp.class(keep=name sex in=in1);   
          by name;     

          bbb="bbb";  
          set sashelp.class(keep=age weight height in=in2);
          put _all_;  
run;  

在PDV中共有13个变量,包括两个新创建的(aaa,bbb),5个数据集中的,6个自动生成的(in1,first.name,last.name,in2, _error_, _n_)。

顺序为:aaa, in1, name, sex, first.name, last.name, bbb, in2, age, weight, height, _error_,_n_。

关于PDV中变量值的RETAIN

一般情况下,DATA步的执行是一个循环的过程,也就是SAS运行到DATA步最后一句后会默认回到DATA语句继续执行。在回到DATA语句再次执行这个DATA步的代码的时候,就会涉及到是否对PDV中变量已有的值清空,这就是RETAIN要做的。      

这里用“一般情况下”,是因为有些情况下,SAS不会回到DATA语句,而是在RUN;语句就结束了。如:
  *** No data  read from outside;  
  data a;
      put _all_;
      x=1;
  run;

  *** No data read  from the first iteration(_N_=1);
  data b;
     x=2;
    put _all_;
     if x=1  then set  sashelp.class;
  run;  
       )

回到PDV:

a. 在DATA步刚开始执行的时候:
      自动生成变量会被附上初始值:_N_=1, _ERROR_=0,FIRST.VAR=1, LAST.VAR=1, 等等;
      如果RETAIN语句对某变量设置了的初始值,则对应的变量被设为指定的值;
      SUM语句(如a+1;)的变量会被初始化为0;
      其他的变量,包括新建变量和SET的数据集对应的变量都会被设为空值。

b. 当SAS执行过程中再次回到DATA语句时:
       自动生成变量的值会被retain;
       如变量来自RETAIN语句、SUM语句、或数据集中,则变量值会被retain;
       其他的变量会被置空。

例如,可以根据下面DATA步所产生的log来判断变量的retain情况:
  proc sort data=sashelp.class out=class;
         by age;
  run;  

  data
test;
    put "===============================";
    put "At begnning: " _all_;

        aaa=_N_;

         set class(keep=name age in=in1);
         by age;

         bbb+age;

       retain ccc 0;     ccc=age+ccc;
       retain ddd;     ddd=sum(ddd,age);

    put "At ending  : " _all_;
  run;  
   





二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:PDV iteration SASHELP OUTSIDE RETAIN 化学品 着色剂 食品 天然

已有 15 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
eijuhz + 20 + 1 + 1 精彩帖子
李会超 + 20 精彩帖子
Tigflanker + 5 + 3 + 3 + 3 精彩帖子!!
tjnkswordsman + 3 + 3 + 2 观点有启发
ziyenano + 5 + 5 + 5 精彩帖子
arthistory4 + 80 + 3 精彩帖子
yukiooy + 1 + 1 + 1 好文章
liujianfang + 100 奖励积极上传好的资料
dxystata + 100 + 1 + 1 奖励积极上传好的资料
webgu + 5 再读一次。

总评分: 经验 + 440  论坛币 + 365  学术水平 + 34  热心指数 + 42  信用等级 + 31   查看全部评分

本帖被以下文库推荐

和谐拯救危机
webgu 发表于 2013-4-12 10:36:40 |显示全部楼层 |坛友微信交流群
大侠对SAS机则的理解 是相当细致,这篇文章也是写得深入浅出。

非常感谢大侠花时间贡献这么好的文章。

BTW, 能排下版,就更好了。不过贴子里排版效果确实不好控制。
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

使用道具

pobel 在职认证  发表于 2013-4-12 10:58:59 |显示全部楼层 |坛友微信交流群
webgu 发表于 2013-4-12 10:36
大侠对SAS机则的理解 是相当细致,这篇文章也是写得深入浅出。

非常感谢大侠花时间贡献这么好的文章。
word排好版粘上去的,不过发出来真是没法看。

现在应该好点儿了。
和谐拯救危机

使用道具

playmore 发表于 2013-4-12 11:00:55 |显示全部楼层 |坛友微信交流群
占个板凳,加到文库
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

使用道具

Eternal0601 发表于 2013-4-12 11:18:01 |显示全部楼层 |坛友微信交流群
学习了

使用道具

qinxue123 发表于 2013-4-12 11:43:05 |显示全部楼层 |坛友微信交流群
提示: 受到警告  webgu 什么意思? 2013-4-12 12:14
其实我一直在努力着。一直努力着......

使用道具

小秋秋123 发表于 2013-4-12 12:43:19 |显示全部楼层 |坛友微信交流群

使用道具

Imasasor 发表于 2013-4-12 16:03:34 |显示全部楼层 |坛友微信交流群
学习了,高屋建瓴啊
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

使用道具

支持下!
Let them be hard, but never unjust

使用道具

haolo996 发表于 2013-4-12 20:43:56 |显示全部楼层 |坛友微信交流群
好文章,值得学习

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-29 07:33