全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
6161 13
2012-08-14
面试问题如下:set a b; 与 set a; set b; 都会有怎样的效果?

回答:
set a b; 就是纵向的拼接,如果有不同的变量,那相应位置就是空值。

set a; set b; 当时就有点虚,后来在群里跟sas兄弟讨论后得到答案如下:
变量数是A B 两个的总和,观测数是A,B中观测最少的那个。原理是 SET A B 一个指针一个pdv;set a;set b 两个指针,一个pdv。a的指针将数据集a的第一条观测读入PDV,b的指针将b的第一条观测读入pdv,然后输出,返回data步开头。以此类推。
比如a的观测少,a的指针先指向数据集a的末尾,由于a的指针已指向数据集a的末尾,固跳出data步。如果加上output还有一些结论,试一下很好理解了。


以下是测试的程序:
data a;
do a=1 to 10 by 2;
output;
end;
run;

data b;
do b=2 to 14 by 2;
output;
end;
run;

data c;
set a;
set b;
output; /*在此无影响*/
run;

data c;
set a;
output; /*b第一个观测为空,b的观测整体往下错了一位*/
set b;
run;

/*b第一个观测为空,a、b每个观测重复两遍(b第一个除外)*/
data c;
set a;
output;
set b;
output;
run;

以上是讨论结果,感谢指点我的兄弟!

二维码

扫码加我 拉你入群

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

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

全部回复
2012-8-15 10:20:01
There are many more combination of set usages. It really depends how much one is understanding.

Here is an example to have all observations output.

data t1;
   do i=1 to 5;
      x=i;
          output;
        end;
run;

data t2;
   do y=1 to 12;
      z=y;
          output;
        end;
run;

data t3;
  if _n_<=nobs then set t1 nobs=nobs;
  set t2;
  run;

  proc print;run;
二维码

扫码加我 拉你入群

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

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

2012-8-15 10:30:27
Thanks so much for this explicit explanation.
二维码

扫码加我 拉你入群

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

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

2012-8-15 11:13:15
bobguy 发表于 2012-8-15 10:20
There are many more combination of set usages. It really depends how much one is understanding.

H ...
set前加 if 之前确实没遇到过,琢磨一下启发很大! 非常感谢
二维码

扫码加我 拉你入群

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

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

2012-8-15 19:13:26
很早之前也实验过,但是在实际工作中从来没使用这种用法
二维码

扫码加我 拉你入群

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

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

2012-8-15 19:18:14
看看呀
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群