楼主: zrh126
1625 7

求解:百岁表变成5岁表 [推广有奖]

  • 1关注
  • 0粉丝

本科生

35%

还不是VIP/贵宾

-

威望
0
论坛币
2013 个
通用积分
0.9000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
766 点
帖子
17
精华
0
在线时间
156 小时
注册时间
2011-8-24
最后登录
2024-11-29

楼主
zrh126 发表于 2015-4-3 16:12:38 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
现有百岁人口构成表,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;
二维码

扫码加我 拉你入群

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

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

关键词:cards Input 人口数量 card 人口构成

沙发
kunkunred 发表于 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;
已有 1 人评分论坛币 收起 理由
admin_kefu + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

藤椅
CathyHong 发表于 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;

板凳
CathyHong 发表于 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时则第二个年龄组没有输出

报纸
kunkunred 发表于 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;



已有 1 人评分论坛币 收起 理由
admin_kefu + 30 热心帮助其他会员

总评分: 论坛币 + 30   查看全部评分

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

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

7
zrh126 发表于 2015-4-8 11:12:39
CathyHong 发表于 2015-4-4 03:54
proc sql;
    create table b as (
    select distinct floor(age/5) as age_group, sum(n) as n
谢谢!自己一直不太会用SQL,这次又学到一些。非常感谢。

8
kunkunred 发表于 2015-4-9 02:26:24
zrh126 发表于 2015-4-8 11:11
谢谢你,但是你的后一种方法我试了一下,发现0岁组丢掉了,而且计算的合计值好像也不太对呢!
It is different grouping. To match others, try the following.

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

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

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