作者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