作者tokyo291 (工口工口)
看板Statistics
标题[程式] SAS 对资料排序
时间Thu Mar 6 00:20:11 2014
[软体程式类别]:
SAS
[程式问题]:
资料处理
[软体熟悉度]:
中(3个月到1年)
[问题叙述]:
最近打算将年龄分组,分成"<30" "30-39" "40-49" "50-59" ">=60"这五组
再算累积次数和百分比的时候,table出现的年龄分组无法和上述的顺序相同
[程式范例]:
Data breast_group; set work.breast1;
If age <30 then group_age = "<30 ";
If age => 30 and age <= 39 then group_age = "30-39 ";
If age => 40 and age <= 49 then group_age = "40-49";
If age => 50 and age <= 59 then group_age = "50-59 ";
If age => 60 then group_age = ">=60 ";
Run;
PROC SORT;
by group_age;
RUN;
PROC FREQ;
TABLE group_age;
run;
得到table的group_age排序是30-39 40-49 50-59 <30 >=60
想询问该如何修改才能使出来的table 顺序变为
"<30" "30-39" "40-49" "50-59" ">=60"
有google到再多一行对应到1 2 3 4 5 的行 然後对这行排序
不过有点麻烦,想询问看有没有直接排序的方法
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.152.111
※ 编辑: tokyo291 来自: 140.116.152.111 (03/06 00:22)
1F:推 imaltar:不要跑proc sort 03/06 09:11
2F:推 imaltar:group_age可设成1、2、3、……等数字变数 03/06 09:13
3F:→ imaltar:想在表格呈现“>30“等、可用proc format 03/06 09:14
Data breast_group; set work.breast1;
If age <30 then group_age = 1;
If age => 30 and age <= 39 then group_age =2;
If age => 40 and age <= 49 then group_age = 3;
If age => 50 and age <= 59 then group_age = 4;
If age => 60 then group_age = 5;
RUN;
PROC format;
value group_age 1 = ' <30 ' 2 = ' 30-39 ' 3 = ' 40-49 ' 4 = ' 50-59 ' 5
= ' >=60 ' ;
value histgrad 1 = '1' 2 = '2' 3 = '3' 4 = 'unknown';
PROC FREQ;
TABLE group_age;
TABLE histgrad;
run;
我这样修改後table变成出现12345无法变成format的内容
请问还有哪里要修改呢?
※ 编辑: tokyo291 来自: 140.116.152.111 (03/06 12:27)
4F:推 imaltar:在PROC FREQ;之後加上format group_age group_age.; 03/06 14:34
5F:→ tokyo291:没问题了!感谢~ 03/06 22:16
6F:→ luenchang:remember to use the ELSE IF statement 03/09 22:55