全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2577 13
2013-11-18
悬赏 100 个论坛币 已解决
请问sas如何实现以下数据处理:
假设我有100个观测值,两个变量age和income。我想求出每个观测值所在年龄阶段中(比如age相差不超过2年)的所有人的income平均值。

详细点说就是,我想加第三个变量,avg_income。比如有第一个人50岁,他的avg_income就是所有48-52岁人的income平均值。第二个人30岁,avg_income就是所有28-32岁人的平均值。以此类推。

另外希望年龄的差距可以设定,比如把两年换成5年。

多谢


(不好意思,刚才的帖子没加悬赏)
二维码

扫码加我 拉你入群

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

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

全部回复
2013-11-18 01:56:13
复制代码
二维码

扫码加我 拉你入群

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

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

2013-11-18 16:00:09
邓老的代码效率不算最高
但是思路让人眼前一亮
二维码

扫码加我 拉你入群

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

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

2013-11-19 07:26:44
Here is a simple solution.

data test;
        do id=1 to 10;
                age = 18+ceil(10*ranuni(12345));
                income = 100000+20000*rannor(12345);
                output;
        end;
run;

proc print;run;


proc sql;
  select distinct a.id, a.age, mean(b.income) as average_inc
  from test a, test b
  where abs(a.age-b.age)<=2
  group by 1
  order by 1,2
  ;
  quit;
二维码

扫码加我 拉你入群

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

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

2013-11-19 08:16:50
bobguy 发表于 2013-11-19 07:26
Here is a simple solution.

data test;
代码是简略了,但是sql使用笛卡尔积连接,产生的数据会很多,运行起来很慢的
二维码

扫码加我 拉你入群

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

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

2013-11-20 14:52:22
数据量大建立age的索引就可以了。
where abs(a.age-b.age)<=2会把年龄缺失的都算进每一组
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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