楼主: austin510
1570 6

[问答] do j=1 to 3;set a;end;与set a;set a;set a;区别在哪里?请高手解答 [推广有奖]

  • 0关注
  • 0粉丝

大专生

31%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
395 点
帖子
37
精华
0
在线时间
55 小时
注册时间
2005-9-4
最后登录
2014-5-5

楼主
austin510 发表于 2013-2-1 13:56:01 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
数据集a见下表:

x

  

a1

  
  

a2

  
  

a3

  
数据集b见下表:

y

  

b1

  
  

b2

  
  

b3

  
欲对a和b进行横向拼接,代码如下:
data c;
    if _n_=1 then do j=1 to 3;
        set a;
    end;

    set b;
run;
data d;
    if _n_=1 then do;
        set a;
        set a;
        set a;

    end;
    set b;
run;
运行之后发现数据集c和d不一样,上述两段红色代码应该是有区别的,但不知道区别在哪里,请高手解释以下,不胜感激。
二维码

扫码加我 拉你入群

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

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

关键词:Set End Data Then 不胜感激 不胜感激 拼接

沙发
zhangzachary 发表于 2013-2-1 14:50:51
怎么说呢。。。
上面那个set a 三次的a 是同一个a, 所以读取了第三条记录。
下面那个三次set a的a 是“不同”的a,所以相当于读取第一条记录,然后被覆盖,然后再被覆盖。
寒冰凤凰 My blog: http://blog.sina.com.cn/u/1058955485

藤椅
ihust 发表于 2013-2-1 17:19:27
data e;
        merge a b;
run;

板凳
ihust 发表于 2013-2-1 17:20:44
你这个要解释清楚,需要从pdv的角度来讲,就可能说得比较清楚,可是我想了一会也没想清楚

报纸
pobel 在职认证  发表于 2013-2-1 19:01:51
SET语句的执行规则是这样的:

1. 一个DATA步中,每一个SET语句都独立地从其所指定数据集中读取数据。
2. DATA步执行过程中,每执行到某个SET语句,就从其所指定的数据集中读取下一条记录。
3. 任意一个SET语句没有数据可读的时候,整个DATA步结束。

楼主给出的例子
data c:
1. _n_=1时执行do循环,执行三次SET a语句,分别读取a中的第1,2,3条记录。
        SET b时读取b中的第一条记录,然后输出(x=a3,y=b1);
2. _n_=2,3时,只从b中读取第2,3条记录,分别输出,同时X的值a3自动retain。(x=a3,y=b2) 和(x=a3,y=b3)
3. _n_=4时,试图读取b中第4条记录,而b中已经没有记录可读,data步结束。

data d:
需要注意的是,_n_=1时,执行3条SET语句,都是读取数据集a的第一条记录。所以和data c的区别就是:d的三条记录中x的值都是a1.


已有 2 人评分学术水平 热心指数 信用等级 收起 理由
denver + 1 + 1 + 1 学习了
zhangzachary + 1 + 1 + 1 pobel每次都能把原理讲清楚~我有概念但是说.

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

和谐拯救危机

地板
austin510 发表于 2013-2-1 19:06:37
楼上的解释比较详细,受教了,set语句用来用去也就那么几种类型,有时候一知半解也不会出问题,都怪自己太较真了。

7
a252693398 发表于 2013-2-2 23:20:07
跟pobel 学习了

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-8 07:52