全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2297 2
2015-11-07
data tt;
  input a;
  cards;
  1
  2
  1
  2
  1
  2
  ;
run;
data aa bb;
  set tt;
  if a=1 then do;
              output aa;       (return;)
              end;
    else if a=2 then goto rr;
  rr: do;
      put "output bb";
      output bb;
      end;
run;
上面的程序中,是要将tt中的a=1和a=2分开输出。
我的问题是,如果不加上括号中的return,那么bb数据集就会既有a=1也有a=2,加上return 强制回到data步开头,才能正确区分a=1和a=2。
  记得SAS不是在output语句后,就自动结束当前的data步操作,进入下一data循环。那为什么这里在a=1时,Output aa之后,不自动结束进入下一data步循环,还要去执行标签tt中的output bb?

二维码

扫码加我 拉你入群

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

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

全部回复
2015-11-7 23:45:52
data tt;
  input a;
  cards;
  1
  2
  1
  2
  1
  2
  ;
run;
data aa bb;
  set tt;
  if a=1 then output aa;
    else if a=2 then  output bb;

run;

把你的程序改成这样就好了。a 要么是1要么是2
RR的情况,如果有你这样独立的程序段,如果没有return,那么他一定会被执行,所以BB肯定都是有的
但如果你加了return那么,a=2时,不会执行RR就没事~~

output好像不是结束吧.是有output存在的程序里,只output它指定的内容,又没说别的不执行了……

data aa bb cc;
  set tt;
  if a=1 then output aa;
    else if a=2 then  output bb;
output cc;
run;
你试试这个,cc里也是很全的……
二维码

扫码加我 拉你入群

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

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

2015-11-8 15:45:56
原来如此,我对output的理解错了,非常感谢。
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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