楼主: Tigflanker
4655 10

[问答] 求助一个Hash Merge问题,基本但是想不明白 [推广有奖]

11
Tigflanker 发表于 2014-12-10 14:12:13
我觉得我想明白了。

Ex:
  1. data ex;
  2.   a = 12;
  3. run;
复制代码
然后:
  1. if 0 then set ex;
复制代码
等价于:
  1. if 0 then do;
  2.   length a 8;  *And label or format if have;
  3.   retain a;
  4.   call missing(a);
  5. end;
复制代码
也就是说,如果把set句拆开,它在data步编译时,编译了属性语句:length,<,label ,format>,retain

然后由于if 0限制执行条件,所以取消了赋值步,用call missing做了替代。

以上推断都是我的猜测,retain也是set句编译范畴语句中的一条。

如有不对,还请指出。

Example:
  1. data x;a = 1234;run;

  2. data one;
  3.   if 0 then do;length a 8;end;

  4.   set sashelp.class;
  5.   if _n_ = 5 then a = 2;
  6. run;

  7. data two;
  8.   if 0 then set x;

  9.   set sashelp.class;
  10.   if _n_ = 5 then a = 2;
  11. run;

  12. data three;
  13.   if 0 then do;length a 8;retain a;call missing(a);end;

  14.   set sashelp.class;
  15.   if _n_ = 5 then a = 2;
  16. run;
复制代码

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 12:34