全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1552 8
2016-07-21
现有的数据有点问题,所以需要有条件的剔除变量,比如
stkcd   费用1  费用2  费用3
1         管理    销售    其他
1          100   200      10
2         管理    其他    文件
2           20      50       70
3         其他   查看    文件
3          100    20        50

我想做的是比如stkcd=2时,如果观测等于‘其他’则费用3里面的文件就删掉,并且下面一行数字70页删掉。
觉得很难设计这个程序,不知道各位达人有没有办法,求助啊。
二维码

扫码加我 拉你入群

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

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

全部回复
2016-7-21 20:42:52
是这样吗?

data test;
input stkcd cost1 $ cost2 $ cost3 $;
  if stkcd ne lag(stkcd) then flag=0;
  if cost2="other" then flag+1;
  if flag=1 then call missing(cost3);
  drop flag;
cards;
1 admin sale other
1 100 200 10
2 admin other file
2 20 50 70
3 other check file
3 100 20 50
;
二维码

扫码加我 拉你入群

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

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

2016-7-21 20:49:00
wwang111 发表于 2016-7-21 20:42
是这样吗?

data test;
不好意思,可能我没说清楚,对于每一个stkcd,只要某一个cost等于'其他'则把这个观测和下一个观测中‘其他’后面所有变量都剔除。
二维码

扫码加我 拉你入群

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

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

2016-7-21 21:47:21
我暂时想到这个办法,有点麻烦,有可能走弯路了,你先看一下:

data test;
input stkcd cost1 $ cost2 $ cost3 $;
cards;
1 admin sale other
1 100 200 10
2 admin other file
2 20 50 70
3 other check file
3 100 20 50
;

%let costnum=3; /* number of COST variables*/
data _null_;
set test end=last;  
  length _code $100 code $1000;
   retain code;
   array cost cost:;
    do i=1 to dim(cost);
         if cost="other" then vname=vname(cost);
        end;
  if vname ne '' then num=input(compress(vname,,'a'),best.)+1;
  if .<num<=&costnum
    then _code='if stkcd='||cat(stkcd)||' then call missing(of cost'||cat(num)||"-cost&costnum);";
  if _n_=1 then code=_code;
  else code=strip(code)||strip(_code);
  if last then do;
  call execute('data wanted;set test;');
  call execute(code);
  call execute('run;');
  end;
run;

二维码

扫码加我 拉你入群

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

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

2016-7-22 21:01:30
wwang111 发表于 2016-7-21 21:47
我暂时想到这个办法,有点麻烦,有可能走弯路了,你先看一下:

data test;
多谢你了, length _code 100code1000; 这行可以把变量定义那么长吗?
走弯路不要紧,能得到想要的结果才比较重要
二维码

扫码加我 拉你入群

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

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

2016-7-22 21:06:16
susanzhu 发表于 2016-7-22 21:01
多谢你了, length _code 100code1000; 这行可以把变量定义那么长吗?
走弯路不要紧,能得到想要的结果才 ...
我是怕你记录数太多,产生很多code,保险起见,长度只要够用就好,你可以根据具体数据调整
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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