楼主: tailezhu2007
16568 6

[原创博文] 关于drop语句的一点浅谈 [推广有奖]

  • 4关注
  • 0粉丝

本科生

70%

还不是VIP/贵宾

-

威望
0
论坛币
2 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1702 点
帖子
84
精华
0
在线时间
112 小时
注册时间
2010-10-20
最后登录
2013-3-16

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
data WORK.TEST;
     infile datalines;
     input
        Name $ 1-14 /
        Address $ 1-14 /
        City $ 1-9 ;
   drop City;
     if City='New York ' then input @1 State $2.;
     else input;
  datalines;
Joe Conley
123 Main St.
Janesville
WI
Jane Ngyuen
555 Alpha Ave.
New York
NY
Jennifer Jason
666 Mt. Diablo
Eureka
CA
  ;
run;

这是一个sas的考试题,但是我稍微改了一下drop city的位置。刚开始我以为所用关于State的值全部是空的,因为在if语句之前有了drop city语句。city就不存在了。
但是我运行了一下,发现结果是这样的: 捕获.PNG ,怎么还会有NY这个值呢?
由此可以看出drop语句是在一个数据迭代过程之后才发挥作用的,并不是在其间发挥作用的。
我为了还自己又创建了一个简单的数据集验证了一下。
这是个人一点看法。
二维码

扫码加我 拉你入群

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

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

关键词:drop Jennifer address Diablo infile 考试题

回帖推荐

webgu 发表于4楼  查看完整内容

drop 语句只是在OUTPUT到数据集时起作用,Drop的变量仍在PDV里。
沙发
chendonghui1987 发表于 2012-5-23 09:57:44 |只看作者 |坛友微信交流群
drop可以看成只是一个标志,他并不会去对原表进行处理,只是对新表中不包含city这一列,if City='New York ' then input @1 State $2.; 这句话的数据源还是你的datalines的数据

使用道具

藤椅
astrozscore 发表于 2012-5-23 10:38:25 |只看作者 |坛友微信交流群
你对这个问题的发现证明你的确想学习SAS,不是背题应付考试。给lz一个建议,你把pdv搞懂后就能彻底理解这个问题。

使用道具

板凳
webgu 发表于 2012-5-23 11:11:20 |只看作者 |坛友微信交流群
drop 语句只是在OUTPUT到数据集时起作用,Drop的变量仍在PDV里。
已有 1 人评分学术水平 收起 理由
astrozscore + 1 分析的有道理

总评分: 学术水平 + 1   查看全部评分

SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

使用道具

报纸
yongjiang2 发表于 2012-6-28 13:58:43 |只看作者 |坛友微信交流群
O(∩_∩)O谢谢

使用道具

地板
徐阿阿 学生认证  发表于 2014-4-17 10:02:28 来自手机 |只看作者 |坛友微信交流群
get,谢谢

使用道具

7
mehrwoods 发表于 2015-10-29 17:14:18 |只看作者 |坛友微信交流群
今天因为自己编程发现的问题,无意搜到这个陈年帖,结合自己的问题对PDV和drop又有了理解:
data t;
  input x1 $ x2 x3;
  cards;
   a 1 2
   b 2 3
   c 3 4
   d 2 6
   e 4 6
   f 7 2
   g 4 5
;run;
data t1 t2;
  set t;
if x2>3 then do;
   drop x3;
   output t1;
  end;
  else output t2;
run;
以上程序的结果,t1 和 t2两个数据集都只有2个变量x1和x2,所以if条件实际上对drop语句是无效的。
综合其他资料看了一下,drop语句是 compile-time only statement,所以自己理解SAS的运行机制大概如下:
编译程序-开启PDV-标注drop变量(不在output中输出,但仍然存在于PDV,所以允许参与运算)
按照这个理解,

1、一楼的程序中,虽然drop city,但执行时仍然可以参加运算,所以有state=NY.
2、我自己的程序中,因为drop编译时已经表明不参加output,而且drop是compile time only statement,所以执行时,if条件对于drop不起作用。
以上自己的理解,欢迎拍砖。

使用道具

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

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

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

GMT+8, 2024-4-28 14:11