在 PROC TABULATE 中对行进行分组
Group rows in PROC TABULATE
我有以下(假的)罪犯犯罪数据:
/* Some fake-data */
DATA offenders;
INPUT id :. crime :4. offenderSex :. count :3.;
INFORMAT id .;
INFILE DATALINES DSD;
DATALINES;
1,110,f,3
2,32,f,1
3,31,m,1
4,113,m,1
5,110,m,1
6,31,m,1
7,31,m,1
8,110,f,2
9,113,m,1
10,31,m,1
11,113,m,1
12,110,f,1
13,32,m,1
14,31,m,1
15,31,m,1
16,31,m,1
17,110,f,2
18,113,m,2
19,31,m,1
20,31,m,1
21,110,m,4
22,32,f,1
23,31,m,1
24,31,m,1
25,110,f,4
26,110,m,1
27,110,m,1
28,110,m,2
29,32,m,1
30,113,f,1
31,32,m,1
32,31,f,1
33,110,m,1
34,32,f,1
35,113,m,2
36,31,m,1
37,113,m,1
38,110,f,1
39,113,u,2
;
RUN;
proc format;
value crimes 110 = 'Theft'
113 = 'Robbery'
32 = 'Assault'
31 = 'Minor assault';
run;
我想使用 PROC TABULATE 创建一个交叉 table:
proc tabulate;
format crime crimes.;
freq count;
class crime offenderSex;
table crime="Type of crime", offenderSex="Sex of the offender" /misstext="0";
run;
这给了我一个 table 这样的:
m f
------------------------------------
Minor assault |
Assault |
Theft |
Robbery |
现在,我想对不同类型的犯罪进行分组:
'Assault' 和 'minor assault' 应该属于 "Violent crimes" 类别,'theft' 和 'robbery' 应该属于 "Crimes against property" 类别:
m f
------------------------------------
Minor assault |
Assault |
*Total violent crimes* |
Theft |
Robbery |
*Total property crimes* |
任何人都可以向我解释如何执行此操作吗?我尝试对 'crime'-变量使用另一种格式,并在 PROC TABULATE 中使用 "category * crime",但结果是这样的,这并不是我想要的:
m f
-------------------------------------------------------
Violent crimes Minor assault |
Assault |
Property crimes Theft |
Robbery |
在 table 维度中使用 all=
选项:
table group='Category' * (crime="Type of crime" All='Total'), offenderSex="Sex of the offender" /misstext="0";
我有以下(假的)罪犯犯罪数据:
/* Some fake-data */
DATA offenders;
INPUT id :. crime :4. offenderSex :. count :3.;
INFORMAT id .;
INFILE DATALINES DSD;
DATALINES;
1,110,f,3
2,32,f,1
3,31,m,1
4,113,m,1
5,110,m,1
6,31,m,1
7,31,m,1
8,110,f,2
9,113,m,1
10,31,m,1
11,113,m,1
12,110,f,1
13,32,m,1
14,31,m,1
15,31,m,1
16,31,m,1
17,110,f,2
18,113,m,2
19,31,m,1
20,31,m,1
21,110,m,4
22,32,f,1
23,31,m,1
24,31,m,1
25,110,f,4
26,110,m,1
27,110,m,1
28,110,m,2
29,32,m,1
30,113,f,1
31,32,m,1
32,31,f,1
33,110,m,1
34,32,f,1
35,113,m,2
36,31,m,1
37,113,m,1
38,110,f,1
39,113,u,2
;
RUN;
proc format;
value crimes 110 = 'Theft'
113 = 'Robbery'
32 = 'Assault'
31 = 'Minor assault';
run;
我想使用 PROC TABULATE 创建一个交叉 table:
proc tabulate;
format crime crimes.;
freq count;
class crime offenderSex;
table crime="Type of crime", offenderSex="Sex of the offender" /misstext="0";
run;
这给了我一个 table 这样的:
m f
------------------------------------
Minor assault |
Assault |
Theft |
Robbery |
现在,我想对不同类型的犯罪进行分组:
'Assault' 和 'minor assault' 应该属于 "Violent crimes" 类别,'theft' 和 'robbery' 应该属于 "Crimes against property" 类别:
m f
------------------------------------
Minor assault |
Assault |
*Total violent crimes* |
Theft |
Robbery |
*Total property crimes* |
任何人都可以向我解释如何执行此操作吗?我尝试对 'crime'-变量使用另一种格式,并在 PROC TABULATE 中使用 "category * crime",但结果是这样的,这并不是我想要的:
m f
-------------------------------------------------------
Violent crimes Minor assault |
Assault |
Property crimes Theft |
Robbery |
在 table 维度中使用 all=
选项:
table group='Category' * (crime="Type of crime" All='Total'), offenderSex="Sex of the offender" /misstext="0";