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

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

hgswz 发表于 2013-4-15 12:36:55 |显示全部楼层 |坛友微信交流群
学习一下

使用道具

zkymath 在职认证  发表于 2013-4-15 19:39:30 |显示全部楼层 |坛友微信交流群
书上都有啊,不过能总结出来值得感谢

使用道具

ziyenano 发表于 2013-4-15 19:56:33 |显示全部楼层 |坛友微信交流群
pobel大侠对SAS机制的了解,在这论坛上数一数二了~

使用道具

henryyhl 发表于 2013-4-15 21:03:12 |显示全部楼层 |坛友微信交流群
有个问题请教一下:
rename在PDV中时怎么执行的呢?我仿照LZ写的一个put但是结果却是不懂。
程序:
data one;
retain n_1 n_2 n_3 0;
put "before rename " _all_;
rename n_1-n_3=n_3_1-n_3_3;
put "after rename " _all_;
RUN;
log中结果:
27   data one;
28   retain n_1 n_2 n_3 0;
29   put "before rename " _all_;
30   rename n_1-n_3=n_3_1-n_3_3;
31   put "after rename " _all_;
32   RUN;

before rename n_1=0 n_2=0 n_3=0 _ERROR_=0 _N_=1
after rename n_1=0 n_2=0 n_3=0 _ERROR_=0 _N_=1
NOTE: 数据集 WORK.ONE 有 1 个观测和 3 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间         0.03 秒
      CPU 时间         0.03 秒
疑问:为什么第2个put语句不显示改名后的变量名而还是原来的变量名?
It's not going to be easy, but it is going to be worth it.

使用道具

pobel 在职认证  发表于 2013-4-15 22:13:17 |显示全部楼层 |坛友微信交流群
henryyhl 发表于 2013-4-15 21:03
有个问题请教一下:
rename在PDV中时怎么执行的呢?我仿照LZ写的一个put但是结果却是不懂。
程序:
您好,对于您的问题,我的理解是这样的:

RENAME语句中所设定的新的变量名字只会影响到输出数据集。
也就是说,SAS在将PDV中的记录输出到目标数据集的时候,才会执行rename的操作。
而PDV中所记录的还是变量原来的名字,我想正是因为这个原因,当我们需要对RENAME所指定的变量进行操作时,需要使用原变量名,而不能用新变量名。
这里使用RENAME语句应该相当于在DATA语句使用RENAME=数据集选项。

data one;
        retain n_1 n_2 n_3 0;
        put "before rename " _all_;
        n_1=n_1+1;
        n_2=n_2+2;
        n_3=n_3+3;
        rename n_1-n_3=n_3_1-n_3_3;
        put "after rename " _all_;
RUN;

data one(rename=( n_1-n_3=n_3_1-n_3_3));
        retain n_1 n_2 n_3 0;
        put "before rename " _all_;
        n_1=n_1+1;
        n_2=n_2+2;
        n_3=n_3+3;
        put "after rename " _all_;
RUN;


而如果在SET语句指定的数据集中使用RENAME=数据集选项,SAS在PDV中记录的应该就是新的名字。

data two;
    put "before set" _all_;
    set one(rename=(n_3_1-n_3_3=new1-new3));
        new1=new1+4;
        put "after set" _all_;
        put "      ";
run;

PUT语句在log中输出的是PDV中变量的名字;相应的,DATA步中对变量进行操作时,也只能用PDV中所记录的变量名。
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
eric_darcy + 1 + 1 + 1 精彩帖子
henryyhl + 1 + 1 + 1 分析的有道理,谢谢解答

总评分: 学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

和谐拯救危机

使用道具

henryyhl 发表于 2013-4-16 08:49:09 |显示全部楼层 |坛友微信交流群
pobel 发表于 2013-4-15 22:13
您好,对于您的问题,我的理解是这样的:

RENAME语句中所设定的新的变量名字只会影响到输出数据集。
非常感谢楼主的解答。学习了。
It's not going to be easy, but it is going to be worth it.

使用道具

自控力 发表于 2013-4-16 12:20:33 |显示全部楼层 |坛友微信交流群
学习

使用道具

雪山飞狼 发表于 2013-4-16 12:58:55 |显示全部楼层 |坛友微信交流群
很有用啊,学习了

使用道具

carey019 学生认证  发表于 2013-4-18 13:12:55 |显示全部楼层 |坛友微信交流群
thank you
切克闹、切克闹、艾瑞巴蒂黑喂狗!

使用道具

冰雨狼 发表于 2013-4-24 23:46:14 |显示全部楼层 |坛友微信交流群
LZ 在你最后的示例代码
proc sort data=sashelp.class;
         by age;
  run;  
中缺少out=work.class(根据后面SET 部分猜测),否则会报错的(默认情况下对于SASHELP逻辑库用户只有读取的权限没有修改权限,故不能进行排序)。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
pobel + 1 + 2 + 1 谢谢

总评分: 学术水平 + 1  热心指数 + 2  信用等级 + 1   查看全部评分

使用道具

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

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

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

GMT+8, 2024-3-29 21:28