全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4681 9
2014-05-07

有以下要求:1.删除ETR>1or ETR<0

2. 删除所得税费用为负的值

3.删除数据不全的公司

4.删除业绩亏损公司

一开始我是用ifdelete处理的,但是出来的结果只是删除了不符合要求的数据的列。如下:

data mylib.try1;

  set mylib.abc_copy;

  if etr>1or etr<0 thendelete;

  if Income_tax_expense<0  then delete;

  if net_profit <0 then delete;

  run;   

但我们老师要求的是比如a公司10年数据里有1年的etr>1,所以关于整个公司的10年的数据都删除掉

后来我参考了下面同学的贴子,用ETR>1or ETR<0试了,但是怎么弄也不行

https://bbs.pinggu.org/thread-777356-1-1.html

data mylib.y;                                                                                                                    set mylib.abc_mb_company_copy;                                                                                                     by stkcd;                                                                                                                         if first.stkcd and etr>1or etr<0 then output ;                                                                                     run;                                                                                                                               proc sql;                                                                                                                         select * from  mylib.abc_mb_company_copya                                                                                         where not exists                                                                                                                  (select * from mylib.y b where a.etr=b.etr);                                                                                       quit;(失败)

重复一下问题的重点:stkcd证券

1.删除ETR>1or ETR<0

2. 删除所得税费用为负的值 Income_tax_expense<0

3.删除数据不全的公司 如缺失值

4.删除业绩亏损公司net_profit <0

只要有任一条件不符合要求,删除该公司的所有信息

如   1中2002年etr>1所以 删除stkcd1所有年度的所有数据。其他删除要求也是这样处理。

stkcd   accper     etr        Income_tax_expense     net_profit     ...

1         2002     1.2              

1         2003     0.1

1         2004     0.5

1         2005     0.7

2         2002     0.8

2         2003     0.1

2         2004     0.5

2         2005     0.7


求求各位大神帮忙一下,在这里感激不尽了。


二维码

扫码加我 拉你入群

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

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

全部回复
2014-5-7 09:24:03
你的要求
3.删除数据不全的公司﹑ 如缺失值
不清楚,不知道你说的究竟是那些数据缺失就算符合条件。同时,也不知道你的数据表结构,所以只能无视。。
复制代码

二维码

扫码加我 拉你入群

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

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

2014-5-7 10:32:46
jeozu 发表于 2014-5-7 09:24
你的要求不清楚,不知道你说的究竟是那些数据缺失就算符合条件。同时,也不知道你的数据表结构,所以只能无 ...
比如说数据为空格没有内容或者是一个小点:
ETR第一个格子空了 或者是net_profit第一个格子是” . ”的情况。
If..delete句式是if net_value_of_inventory=. or net_value_of_inventory ="" then delete;
但是字段stkcd ﹑accper﹑etr﹑net_profit ﹑ year等有点多,有没有办法一次性处理在以上两个问题??
麻烦你了~大神~~谢谢
stkcd   accper       etr        net_profit        net_value_of_inventory
1         2002                          .                    300
1         2003       1.2              1                    500
二维码

扫码加我 拉你入群

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

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

2014-5-7 12:04:05
换个思路吧,我们先把 满足删除条件的公司ID删选出来, 变量stkcd是id吗????然后就好办了。
data mylib.try1(keep=id);                                                                                                               
array value{6} stkcd accper etr Income_tax_ expense net_profit;                                                                        
set mylib.abc_copy;                                                                                                                    
if etr>1or etr<0 then id=stkcd;                                                                                                        
elseif Income_tax_expense<0 then id=stkcd;                                                                                             
elseif net_profit <0 then id=stkcd;                                                                                                   
elseif do i=1 to 6;                                                                                                                    
           if value{i}=. then id=stkcd;                                                                                                
           break;                                                                                                                       
        end;                                                                                                                           
run;

说明一下:1) 我觉得应该用if elseif语句,因为一行数据只要满足一个条件,就可以了;
                 2)你说的数据不全,实在是耐人寻味啊,缺失值算是不全,要是那一年数据完全没有也算不全,代码里没体现;
                 3)本来,尽量不出现重复的公司ID,可后来一看  还是会出现重复的ID  毕竟多行数据在,这个代码页没体现;
                 3)我接触SAS 不到2个月,上诉代码也没测试过(数组元素个数 也意思意思搞了下),就是给个我的思路,希望对LZ有所帮助;
附件列表
1.JPG

原图尺寸 19.66 KB

1.JPG

二维码

扫码加我 拉你入群

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

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

2014-5-7 12:25:09
larry_dh 发表于 2014-5-7 12:04
换个思路吧,我们先把 满足删除条件的公司ID删选出来, 变量stkcd是id吗????然后就好办了。[/backcolor ...
嗯?我们老师在要求上原话是:剔除财务数据不全和注册地﹑名义税率信息缺失的公司。
网上看到缺失值不是空格和点吗?
如:if net_value_of_inventory=. or net_value_of_inventory =""
变量其实不只是6个,很多个~~~我会试试你的那个看看,运行出来如何。谢谢你的思路。^_^
二维码

扫码加我 拉你入群

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

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

2014-5-7 12:27:21
小芝麻子 发表于 2014-5-7 10:32
比如说数据为空格没有内容或者是一个小点:
ETR第一个格子空了 或者是net_profit第一个格子是” . ”的情 ...
如果重要的都是数据类型,那么可以删除,
复制代码
这样的代码不稳健,适合分析,不适合生产。可以先proc contents后,使用使用功能比较好的编辑器如vi等把所有你需要的变量编辑出来。偷懒可以用好的编辑器来。
如果只有net_value_of_inventory和 net_value_of_inventory两个字段,
那么可以再上一个sql中改一下就可以了。
复制代码

二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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