全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2348 6
2016-09-28
data cdet;
       cdetails='Diagnosis of ODD/Other';output;
       cdetails='';output;
       cdetails='';output;
run;

data cdet1;
        set cdet;
        
        if cdetails='' then cdetails='None';
        if cdetails='Diagnosis of ODD/Other' then do;
                cdetails='Diagnosis of ODD';output;
                cdetails='Other';output;
        end;        
        output;        
run;

请问,有否有办法通过类似第2个data步的output法把数据集1的三条记录变为四条(odd,other,none,none)?

二维码

扫码加我 拉你入群

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

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

全部回复
2016-9-28 15:40:19
data cdet1;
set cdet(rename=(cdetails=cdetails1));
i=1;
do until(scan(cdetails1,i,'/')='');
  cdetails=scan(cdetails1,i,'/');
  if cdetails='' then cdetails='None';
output;
i+1;
end;
keep cdetails;
run;

如果类似你的data步,可以在最后的output加一个else,这样就不会重复输出了:

data cdet1;
        set cdet;
        
        if cdetails='' then cdetails='None';
        if cdetails='Diagnosis of ODD/Other' then do;
                cdetails='Diagnosis of ODD';output;
                cdetails='Other';output;
        end;        
        else output;        
run;
二维码

扫码加我 拉你入群

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

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

2016-9-29 00:05:28
我把原code运行了一下cdet1有5个观测值(odd,other,other,none,none),想搭车问一下为什么有两个other?
二维码

扫码加我 拉你入群

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

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

2016-9-29 09:34:29
笑萧人 发表于 2016-9-29 00:05
我把原code运行了一下cdet1有5个观测值(odd,other,other,none,none),想搭车问一下为什么有两个other ...
set cdet中的第1条记录时,向cdet1“output”了3条记录,
第1个“output”时,“cdetails='Diagnosis of ODD';”
第2个“output”时,“cdetails='Other';”
第3个“output”时,cdetails没有改变,还是Other

set cdet中的第2条记录时,向cdet1“output”了1条记录,
只运行了第3个“output”,此时“cdetails='None';”

set cdet中的第3条记录时,向cdet1“output”了1条记录,
只运行了第3个“output”,此时“cdetails='None';”

所以总共output了5次,形成5条记录
二维码

扫码加我 拉你入群

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

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

2016-9-29 10:02:29
笑萧人 发表于 2016-9-29 00:05
我把原code运行了一下cdet1有5个观测值(odd,other,other,none,none),想搭车问一下为什么有两个other ...
是我有点自己钻牛角尖了,很容易的一个东西:
data cdet1;
        set cdet;
        
        if cdetails='Diagnosis of ODD/Other' then do;
                cdetails='Diagnosis of ODD';output;
                cdetails='Other';output;
        end;
        else do;
                if cdetails=''  then cdetails='None';output;
        end;
run;

第二个output不但会把do外面满足条件的记录output出来,还会把最近一条满足的结果output出来(other)
二维码

扫码加我 拉你入群

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

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

2016-9-29 10:04:48
wwang111 发表于 2016-9-28 15:40
data cdet1;
set cdet(rename=(cdetails=cdetails1));
i=1;
嗯,谢谢大神,后面很快自己反应过来了,Orzzz~~~
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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