全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2270 12
2013-04-12
我现在需要将一些数据进行如下处理:

A



B



C



D



E



1


  

stkcd1

  
  

物业管理和其他

  
  

100

  

2007/12/31



1


  

stkcd1

  
  

房地产

  
  

200

  

2007/12/31



1



stkcd1



产品



300



2007/12/31



1


  

stkcd1

  
  

物业管理

  
  

250

  

2008/12/31



1


  

stkcd1

  
  

房地产

  
  

230

  

2008/12/31



1



stkcd1



产品



480



2008/12/31



2


  

stkcd2

  
  

服务业

  
  

120

  

2000/12/31



2



stkcd2



运输业务



130



2000/12/31



2


  

stkcd2

  
  

生物制药

  
  

140

  

2001/12/31



2



stkcd2



生物特征识别



150



2001/12/31



3


  

stkcd3

  
  

信息传播服务业

  
  

100

  

2003/12/31



3


  

stkcd3

  
  

房地产管理业

  
  

150

  

2003/12/31



3


  

stkcd3

  
  

租赁服务业

  
  

150

  

2003/12/31



3



stkcd3



房地产开发与经营业



300



2003/12/31




有些股票的D列数值是它上面两行数值的和,比如stkcd1的产品这一观测值,就等于上两行观测值的和,但是不是所有的股票都是如此,也不是每只股票每年都如此,我想将有加总情况的那一行删除(他们的C列名称也各不相同),要怎么处理?
求高人指点。。
二维码

扫码加我 拉你入群

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

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

全部回复
2013-4-12 09:49:53
data have;
input A B $ C;
datalines;
1 stkcd1 100
1 stkcd1 200
1 stkcd1 300
1 stkcd1 250
1 stkcd1 230
1 stkcd1 480
2 stkcd2 120
2 stkcd2 130
2 stkcd2 140
2 stkcd2 150
3 stkcd3 100
3 stkcd3 150
3 stkcd3 150
3 stkcd3 300
; run;
proc sort data=have;  by a;  run;

data have1;
    set have;
        by a;
        lag1 = lag(c);
        lag2 = lag2(c);
        if  c = lag1+lag2 then flag=1;
        drop lag1 lag2;
run;

data want;
   set have1;
   if flag=1 then delete;
   drop flag;
run;


二维码

扫码加我 拉你入群

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

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

2013-4-12 10:43:56
yongyitian 发表于 2013-4-12 09:49
data have;
input A B $ C;
datalines;
非常感谢~~
不过还有一点小问题,不是已经by a处理了吗?为什么lag(C)处理后不是每只股票前面都有一个缺失值生成呢?
这样如果前后两只股票相接的地方,两个数的和相加恰巧也等于下面一个数的和怎么办?
二维码

扫码加我 拉你入群

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

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

2013-4-12 11:13:28
DATA A;
INPUT A  B $6. C $20. D  E $10.;
DATALINES;
1 stkcd1 物业管理和其他       100 2007/12/31
1 stkcd1 房地产              200 2007/12/31
1 stkcd1 产品                300 2007/12/31
1 stkcd1 物业管理            250 2008/12/31
1 stkcd1 房地产              230 2008/12/31
1 stkcd1 产品                480 2008/12/31
2 stkcd2 服务业              120 2000/12/31
2 stkcd2 运输业务            130 2000/12/31
2 stkcd2 生物制药            140 2001/12/31
2 stkcd2 生物特征识别        150 2001/12/31
3 stkcd3 信息传播服务业      100 2003/12/31
3 stkcd3 房地产管理业        150 2003/12/31
3 stkcd3 租赁服务业          150 2003/12/31
3 stkcd3 房地产开发与经营业   300 2003/12/31
;
RUN;

proc sort data=a;by b c;run;
data b;
set a;
by  b c;
j=lag(d);
retain f;
if first.b or first.c then f=d;
else f=d+j;
run;
二维码

扫码加我 拉你入群

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

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

2013-4-12 11:21:25

proc sort data=a;by b c e;run;
data b;
set a;
by  b c e;

if first.b or first.c;

run;
二维码

扫码加我 拉你入群

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

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

2013-4-12 11:28:38
该了一点, 要把c换成d 试试看。

data have;
input A B $ C;
datalines;
1 stkcd1 100
1 stkcd1 200
1 stkcd1 300
1 stkcd1 250
1 stkcd1 230
1 stkcd1 480
2 stkcd2 710
2 stkcd2 1190
2 stkcd2 140
2 stkcd2 150
3 stkcd3 100
3 stkcd3 150
3 stkcd3 150
3 stkcd3 300
; run;
proc sort data=have;  by a;  run;

data have1;
    set have;
        by a;
        lag1 = lag(c);
        lag2 = lag2(c);
        if first.a then do;
          flag=.;
                  n=1;
        end;
        else n+1;
        if  c = lag1+lag2 then flag=1;
        drop lag1 lag2;
run;

data want;
   set have1;
   if flag=1 and n not in(1 2) then delete;
   drop flag n;
run;

二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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