楼主: funwin
5777 20

[求助]如何增加观测值? [推广有奖]

  • 0关注
  • 2粉丝

硕士生

85%

还不是VIP/贵宾

-

威望
0
论坛币
177 个
通用积分
0
学术水平
0 点
热心指数
4 点
信用等级
0 点
经验
2256 点
帖子
192
精华
0
在线时间
131 小时
注册时间
2007-11-7
最后登录
2016-1-22

楼主
funwin 发表于 2009-1-3 23:36:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

原数据:

姓名                   日期                收入

AAA                    200803           5300

AAA                    200806           5500

AAA                    200809           5800

AAA                    2008012          5700

BBB                   200806             6400

BBB                   2008012             6900

现在假设对AAA来说4,5月收入和3月的一样,7,8月收入和6月的一样,10,11月收入和9月的一样,对BBB来说,7,8,9,10,11月的收入和6月的一样。

如何把这些缺失的月份和收入加进去?最后生成:

姓名                   日期                收入

AAA                    200803           5300

AAA                    200804           5300

AAA                    200805           5300

AAA                    200806           5500

AAA                    200807           5500

AAA                    200808           5500

AAA                    200809           5800

AAA                    200810           5800

AAA                    200811           5800

AAA                    2008012          5700

BBB                   200806             6400

BBB                   200806             6400

BBB                   200806             6400

BBB                   2008012             6900

二维码

扫码加我 拉你入群

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

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

关键词:观测值 月收入 观测

回帖推荐

zhitler 发表于4楼  查看完整内容

data test; infile datalines missover; input name : $3. date : 6. income : 4.;datalines;AAA 200803 5300AAA 200806 5500AAA 200809 5800AAA 200812 5700BBB 200806 6400BBB 200812 6900;run;proc sort data=test out=testsort; by name date;run;data result; set testsort; by name date; retain ic1 0 dt1 0; if first.name then  do;   ic1=income;  dt1=dat ...

timing 发表于3楼  查看完整内容

proc sql;insert into _datatable_values().......;run;proc sort data=_datatable_;by 姓名 日期 ;run;

本帖被以下文库推荐

沙发
funwin 发表于 2009-1-4 20:51:00

自己顶一下!望高手指点一下

藤椅
timing 发表于 2009-1-5 10:10:00

proc sql;

insert into _datatable_

values()

.......;

run;

proc sort data=_datatable_;

by 姓名 日期 ;

run;

已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

板凳
zhitler 发表于 2009-1-5 16:04:00

data test;
 infile datalines missover;
 input name : $3. date : 6. income : 4.;
datalines;
AAA 200803 5300
AAA 200806 5500
AAA 200809 5800
AAA 200812 5700
BBB 200806 6400
BBB 200812 6900
;
run;

proc sort data=test out=testsort;
 by name date;
run;

data result;
 set testsort;
 by name date;
 retain ic1 0 dt1 0;
 if first.name then
 do;
  ic1=income;
  dt1=date;
  output;
 end;
 if not first.name then
 do;
  dt2=date;
  ic2=income;
  output;
  do i=dt1 +1 to dt2-1;
   income=ic1;
   date=i;
   output;
  end;
  ic1=ic2;
  dt1=dt2;
 end;
 keep name date income;
run;

proc sort data=result;
 by name date;
run;

proc print;
run;

已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

报纸
jundal 发表于 2009-1-5 17:17:00

好复杂。。。

地板
funwin 发表于 2009-1-5 21:39:00

非常感谢楼上各位的指点。

四楼zhitler的方法最为实用,佩服!

7
nernernini 发表于 2009-1-5 22:24:00
good to learn.

8
funwin 发表于 2009-1-5 23:03:00
现在假设再把数据复杂化一些:

1,如果有前一年的数据,比如要将200801 and 200802的数据和200712月的相同;

2,收入的品种增加了,有工资,奖金,津贴

原数据:

姓名

日期

收入种类

金额

AAA

200712

工资

5000

AAA

200712

奖金

2000

AAA

200712

津贴

1000

AAA

200803

工资

5400

AAA

200806

工资

5500

BBB

200710

工资

3500

BBB

200710

奖金

3600

BBB

200804

工资

6100

 

仍要把缺失了的月份的值补上。 假设后面的月份和前一次出现的月份的收入种类和金额都相同,

即:对AAA来说,200801 and 200802的数据和200712的相同;200804 and 200805的数据和200803的相同(收入种类和金额均相同);对BBB200711, 200712, 2009801, 200802, 200803 的数据和200710的相同。 如何把这些缺失的值加进去?

 

望高手指点!
希望变成这样的数据:

姓名

日期

收入种类

金额

AAA

200712

工资

5000

AAA

200712

奖金

2000

AAA

200712

津贴

1000

AAA

200801

工资

5000

AAA

200801

奖金

2000

AAA

200801

津贴

1000

AAA

200802

工资

5000

AAA

200802

奖金

2000

AAA

200802

津贴

1000

AAA

200803

工资

5400

AAA

200804

工资

5400

AAA

200805

工资

5400

AAA

200806

工资

5500

BBB

200710

工资

3500

BBB

200710

奖金

3600

BBB

200711

工资

3500

BBB

200711

奖金

3600

BBB

200712

工资

3500

BBB

200712

奖金

3600

BBB

200801

工资

3500

BBB

200801

奖金

3600

BBB

200802

工资

3500

BBB

200802

奖金

3600

BBB

200803

工资

3500

BBB

200803

奖金

3600

BBB

200804

工资

6100

希望四楼的zhitler再次给与帮助!多谢了!

 

9
sushe1527 发表于 2009-1-5 23:09:00
不能等他来 发站内信通知他

10
pobel 在职认证  发表于 2009-1-6 11:37:00

data origin;
     length item $10;
     input name $ date : yymmn6. item $ money;
     cards;
AAA 200712 salary 5000
AAA 200712 bonus 2000
AAA 200712 allowance 1000
AAA 200803 salary 5400
AAA 200806 salary 5500
BBB 200710 salary 3500
BBB 200710 bonus 3600
BBB 200804 salary 6100
;

proc sort data=origin;
     by name descending date;
run;

data result;
     set origin;
     by name descending date;
     nextdate=lag(date);
     if first.name then nextdate=.;
     if date and nextdate then datedif=datdif(date,nextdate,'30/360');
     retain dif;
     if first.date then dif=datedif;
     if dif then i=dif/30;
     if dif le 1 or dif=. then output;
     else do j=0 to i-1;
             date=date+30;
             output;
          end;
     format date yymmn6.;
     keep name date item money;
run;

proc sort data=result;
     by name date;
run;

和谐拯救危机

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-20 11:47