全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1664 7
2015-04-03
现有百岁人口构成表,0,1,2,.....,99,100岁,每一岁的人口数量,现在想得到每五岁一个年龄组的人口数量,也就是每五岁求和,想了半天,也没实现,求解!谢谢啦!以前15岁为例,数据如下:
data a;
input age n@@;
cards;
0 5974
1 7841
2 6614
3 4516
4 5559
5 4998
6 5252
7 3892
8 3809
10 2013
11 3909
12 6659
13 3544
14 4567
15 3426
;
run;
二维码

扫码加我 拉你入群

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

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

全部回复
2015-4-4 02:13:17
data b(keep=age sum);
set a;
retain sum;
if (mod(age,5)=1) then sum=n;
else sum+n;
if (mod(age,5)=0);
run;
二维码

扫码加我 拉你入群

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

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

2015-4-4 03:54:00
proc sql;
    create table b as (
    select distinct floor(age/5) as age_group, sum(n) as n
    from a
    group by floor(age/5))
    ;
quit;
二维码

扫码加我 拉你入群

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

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

2015-4-4 03:57:11
kunkunred 发表于 2015-4-4 02:13
data b(keep=age sum);
set a;
retain sum;
如果age有缺失的话在mod(age,5)这里会出现bug,比如缺少age=5时则第二个年龄组没有输出
二维码

扫码加我 拉你入群

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

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

2015-4-6 21:10:14
CathyHong 发表于 2015-4-4 03:57
如果age有缺失的话在mod(age,5)这里会出现bug,比如缺少age=5时则第二个年龄组没有输出
You are right. Here is the updated code.

data a;
set a;
g=floor(age/5);
run;
data b;
set a;
retain sum;
by g;
if first.g then sum=n;
else sum+n;
if last.g;
run;

SAS has many useful procedures. Here is another way to do it with proc format and proc means.

proc format;
value agerange
0='0'
1-5='1-5'
6-10='6-10'
11-15='11-15'
;
run;
proc means data=a sum noprint ;
var n;
by age;
format age agerange.;
output out=c sum=sum;
run;



二维码

扫码加我 拉你入群

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

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

2015-4-8 11:11:24
kunkunred 发表于 2015-4-6 21:10
You are right. Here is the updated code.

data a;
谢谢你,但是你的后一种方法我试了一下,发现0岁组丢掉了,而且计算的合计值好像也不太对呢!
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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