全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3600 11
2010-03-21
公司001200103月没有销售数据,所以为缺失值,200104月份却有了两个月的加总数据(所以不准确),想把200104月的数据也变为缺失值,以便于后面删除。002公司也一样,想把200309月的数据也变为缺失值。总的想法就是:如何将有缺失的月份的下一个月份的数据也变为缺失值?

company
month
sales
001
200101
700
001
200102
650
001
200103
.
001
200104
1500
001
200105
850
……..
…….
……
002
200305
.
002
200306
.
002
200307
.
002
200308
.
002
200309
3600
002
200310
1200
……..
…….
……

变为:
company
month
sales
001
200101
700
001
200102
650
001
200103
.
001
200104
.
001
200105
850
……..
…….
……
002
200305
.
002
200306
.
002
200307
.
002
200308
.
002
200309
.
002
200310
1200
……..
…….
……




company month sales 001 200101 700 001 200102 650 001 200103 . 001 200104 1500 001 200105 850 …….. ……. …… 002 200305 . 002 200306 . 002 200307 . 002 200308 . 002 200309 3600 002 200310 1200 …….. ……. …… 变为: company month sales 001 200101 700 001 200102 650 001 200103 . 001 200104 . 001 200105 850 …….. ……. …… 002 200305 . 002 200306 . 002 200307 . 002 200308 . 002 200309 . 002 200310 1200 …….. ……. ……
二维码

扫码加我 拉你入群

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

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

全部回复
2010-3-21 09:14:55
**I haven't dealt with month. 200101--you mean January, 2001 ***;
**** Anyway it doesn't affect your goal ***;
data company;
  input company$3. month sales;
  datalines;
001 200101 700
001 200102 650
001 200103 .
001 200104 1500
001 200105 850
002 200305 .
002 200306 .
002 200307 .
002 200308 .
002 200309 3600
002 200310 1200
;
run;

data companynew(drop=flag);
  set company;
  retain flag;
  if sales=. then  flag=1;
  else if flag=1 then do;
     sales=.;
          flag=0;
        end;
run;

proc print; id company; run;

***** SAS output ****;
                                     company     month    sales

                                       001      200101      700
                                       001      200102      650
                                       001      200103        .
                                       001      200104        .
                                       001      200105      850
                                       002      200305        .
                                       002      200306        .
                                       002      200307        .
                                       002      200308        .
                                       002      200309        .
                                       002      200310     1200
二维码

扫码加我 拉你入群

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

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

2010-3-21 10:14:01
gzjb 发表于 2010-3-21 09:14
**I haven't dealt with month. 200101--you mean January, 2001 ***;
**** Anyway it doesn't affect your goal ***;
data company;
  input company$3. month sales;
  datalines;
001 200101 700
001 200102 650
001 200103 .
001 200104 1500
001 200105 850
002 200305 .
002 200306 .
002 200307 .
002 200308 .
002 200309 3600
002 200310 1200
;
run;

data companynew(drop=flag);
  set company;
  retain flag;
  if sales=. then  flag=1;
  else if flag=1 then do;
     sales=.;
          flag=0;
        end;
run;

proc print; id company; run;

***** SAS output ****;
                                     company     month    sales

                                       001      200101      700
                                       001      200102      650
                                       001      200103        .
                                       001      200104        .
                                       001      200105      850
                                       002      200305        .
                                       002      200306        .
                                       002      200307        .
                                       002      200308        .
                                       002      200309        .
                                       002      200310     1200
受益匪浅
非常感谢
二维码

扫码加我 拉你入群

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

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

2010-3-21 10:22:19
如果情况更复杂些:
有的公司可能第一个月的数据就是缺失值,那么第二的月的数据不应该被认为是错误值,所以不应该被设为缺失值。也就是:每家公司,第一个月如果是缺失值,那么第二个月不需要被设为缺失值;或者从一开始都是缺失值,那么第一个有数据的月份也不应该设为缺失值。而其他那些在中间出现的缺失值情况,则按之前的处理方法。
如何能在上述codes上处理这种情况?再次请教!
如下表
company  month     sales
001      200101      .
001      200102      650  /*不变,因为前一个月是第一个缺失值, 不能说明这个月的数据重复计算了,所以是正确值*/
001      200103        .
001      200104      1500  /*这个才需要设为” .”*/
001      200105      850
002      200305        .
002      200306        .
002      200307        .
002      200308        .
002      200309     1600  /*也不变,因为从一开始都是缺失值, 也不能说明这个月的数据是错误的,所以是正确值*/
002      200310     1200
002      200311      .
002      200312      .
002      200401      .
002      200402     1300   /*这个才需要设为” .”*/
002      200403     1400
二维码

扫码加我 拉你入群

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

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

2010-3-21 10:32:07
可以以这个为例:
data company;
  input company$3. month sales;
  datalines;
001 200101 .
001 200102 650
001 200103 .
001 200104 1500
001 200105 850
002 200305 .
002 200306 .
002 200307 .
002 200308 .
002 200309 1600
002 200310 1200
003 200305 80
003 200306 .
003 200307 190
003 200308 100
;
run;

希望得到:
company   date   sales
001      200101   .
001      200102   650
001      200103   .
001      200104   .
001      200105   850
002      200305    .
002      200306    .
002      200307    .
002      200308    .
002      200309    1600
002      200310    1200
003      200305    80
003      200306    .
003      200307    .
003      200308    100
二维码

扫码加我 拉你入群

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

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

2010-3-21 21:39:56
自己顶!
希望哪位帮忙解决这个问题!
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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